1.MySQL儲存引擎
MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
MySQL支援數個儲存引擎作為對不同表的類型的處理器。MySQL儲存引擎包括處理事務安全表的引擎和處理非事務安全表的引擎:
當你建立一個新表的時候,你可以通過添加一個ENGINE 或TYPE 選項到CREATE TABLE語句來告訴MySQL你要建立什麼類型的表:
CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = MEMORY;
雖然TYPE仍然在MySQL 5.1中被支援,現在ENGINE是首選的術語。
如何選擇最適合你的儲存引擎呢?
下述儲存引擎是最常用的:
◆ MyISAM:預設的MySQL外掛程式式儲存引擎,它是在Web、資料倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改STORAGE_ENGINE組態變數,能夠方便地更改MySQL伺服器的預設儲存引擎。
◆ InnoDB:用於交易處理應用程式,具有眾多特性,包括ACID事務支援。
◆ BDB:可替代InnoDB的事務引擎,支援COMMIT、ROLLBACK和其他事務特性。
◆ Memory:將所有資料儲存在RAM中,在需要快速尋找引用和其他類似資料的環境下,可提供極快的訪問。
◆ Merge:允許MySQL DBA或開發人員將一系列等同的MyISAM表以邏輯方式組合在一起,並作為1個對象引用它們。對於諸如資料倉儲等VLDB環境十分適合。
◆ Archive:為大量很少引用的曆史、歸檔、或安全審計資訊的儲存和檢索提供了完美的解決方案。
◆ Federated:能夠將多個分離的MySQL伺服器連結起來,從多個物理伺服器建立一個邏輯資料庫。十分適合於分布式環境或資料集市環境。
◆ Cluster/NDB:MySQL的簇式資料庫引擎,尤其適合於具有高效能尋找要求的應用程式,這類尋找需求還要求具有最高的正常工作時間和可用性。
◆ Other:其他儲存引擎包括CSV(引用由逗號隔開的用作資料庫表的檔案),Blackhole(用於臨時禁止對資料庫的應用程式輸入),以及Example引擎(可為快速建立定製的外掛程式式儲存引擎提供協助)。
請記住,對於整個伺服器或方案,你並不一定要使用相同的儲存引擎,你可以為方案中的每個表使用不同的儲存引擎,這點很重要。
一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的查看:
看你的mysql現在已提供什麼儲存引擎:
mysql> show engines;
看你的mysql當前預設的儲存引擎:
mysql> show variables like '%storage_engine%';
你要看某個表用了什麼引擎(在顯示結果裡參數engine後面的就表示該表當前用的儲存引擎):
mysql> show create table 表名;
2.PHP如何解決網站大流量與高並發的問題
首先,確認伺服器硬體是否足夠支援當前的流量。
普通的P4伺服器一般最多能支援每天10萬獨立IP,如果訪問量比這個還要大, 那麼必須首先配置一台更高效能的專用伺服器才能解決問題 ,否則怎麼最佳化都不可能徹底解決效能問題。
其次,最佳化資料庫訪問。
前台靜態化,完全靜態化可以完全不用訪問資料庫,不過對於頻繁更新的網站, 靜態化往往不能滿足某些功能。
緩衝技術就是另一個解決方案,就是將動態資料儲存到快取檔案中,動態網頁直接調用這些檔案,而不必再訪問資料庫
資料庫讀寫分離
如果確實無法避免對資料庫的訪問,那麼可以嘗試最佳化資料庫的查詢SQL.避免使用Select * from這樣的語句,每次查詢只返回自己需要的結果,避免短時間內的大量SQL查詢。使用join代替子查詢,使用預存程序,事務控制
第三,禁止外部的盜鏈。 .htaccess檔案
外部網站的圖片或者檔案盜鏈往往會帶來大量的負載壓力,因此應該嚴格限制外部對於自身的圖片或者檔案盜鏈,好在目前可以簡單地通過refer來控制盜鏈,Apache自己就可以通過配置來禁止盜鏈,IIS也有一些第三方的ISAPI可以實現同樣的功能。當然,偽造refer也可以通過代碼來實現盜鏈,不過目前蓄意偽造refer盜鏈的還不多, 可以先不去考慮,或者使用非技術手段來解決,比如在圖片上增加浮水印。
第四,控制大檔案的下載。
大檔案的下載會佔用很大的流量,並且對於非SCSI硬碟來說,大量檔案下載會消耗CPU,使得網站響應能力下降。因此,盡量不要提供超過2M的大檔案下載,如果需要
提供,建議將大檔案放在另外一台伺服器上。
第五,使用不同主機分流主要流量
將檔案放在不同的主機上,提供不同的鏡像供使用者下載。比如如果覺得RSS檔案佔用流量大,那麼使用FeedBurner或者FeedSky等服務將RSS輸出放在其他主機上,這樣別人訪問的流量壓力就大多集中在FeedBurner的主機上,RSS就不佔用太多資源了。
第六,使用流量分析統計軟體。
在網站上安裝一個流量分析統計軟體,可以即時知道哪些地方耗費了大量流量,哪些頁面需要再進行最佳化,因此,解決流量問題還需要進行精確的統計分析才可以。我推薦使 用的流量分析統計軟體是Google Analytics(Google分析)。我使用過程中感覺其效果非常不錯,稍後我將詳細介紹一下Google Analytics的一些使用常識和技巧。
*****************************************************************************************
一:緩衝技術
如果不產生靜態話,主要考慮用緩衝技術。比如一條SQL語句:
$sql=SELECT * FROM article ORDER BY id DESC LIMIT 0,10;
你可以將該條SQL語句的查詢結果緩衝起來,當再次需要用到同樣的SQL語句時,直接從緩衝讀取即可,無需再讀取資料庫。
緩衝的兩種方法:
1:將以上SQL的查詢結果以檔案的形式儲存,比如儲存到 'cache/'.md5($sql).'.cache.php';讀取時直接讀取該緩衝;
2:用記憶體層級緩衝memcache,將以上查詢結果存到memcache伺服器記憶體中,是一種效率很高的解決方案;
二:資料庫讀寫分離
用Mysql主從架構不同的Mysql伺服器,一個主伺服器用來寫和更新以及刪除操作,另外的從伺服器用於讀操作
三:資料表分表技術
1:可以將一張含有很多欄位的大表分成若干個含有部分欄位的小表,每個表之間用一個key來建立聯絡,減輕資料表負擔;
2:同理,也可以講一個大表,分成具有相同欄位的若干個字表,每個表格儲存體的資料按照一定的hash演算法進行分配,同樣可以減輕每個表的負擔
四:給每個表建立必要的索引
3.並發類比
apache的bin目錄下,有個名為ab的檔案,我們通常稱它為ab測試。它能夠類比http請求,並post參數之類。並能建立多線程。
用linux下的curl也可以。