PHP 技術總結

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也可以。

發佈了143 篇原創文章 · 獲贊 11 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章