數(shù)據(jù)庫(kù)數(shù)量級(jí)提高怎么優(yōu)化 為什么php不適合做計(jì)算密集型業(yè)務(wù)?
為什么php不適合做計(jì)算密集型業(yè)務(wù)?PHP,即 "超文本預(yù)處理器 "是一種通用的開源腳本語言。PHP是一種在服務(wù)器端執(zhí)行的腳本語言,類似于C語言,是一種常用的網(wǎng)站編程語言。PHP的獨(dú)特語法是C、Jav
為什么php不適合做計(jì)算密集型業(yè)務(wù)?
PHP,即 "超文本預(yù)處理器 "是一種通用的開源腳本語言。PHP是一種在服務(wù)器端執(zhí)行的腳本語言,類似于C語言,是一種常用的網(wǎng)站編程語言。PHP的獨(dú)特語法是C、Java、Perl和PHP 自己的語法。有利于學(xué)習(xí),應(yīng)用廣泛,主要適用于Web開發(fā)領(lǐng)域。
1.優(yōu)點(diǎn):開源、免費(fèi)、快速【程序開發(fā)快、運(yùn)行快、技術(shù)學(xué)習(xí)快】
1)跨平臺(tái),性能優(yōu)越,與Linux/Unix結(jié)合時(shí)比與Windows結(jié)合時(shí)強(qiáng)45%,與許多免費(fèi)平臺(tái)結(jié)合時(shí)非常經(jīng)濟(jì),如LAMP(Linux /Apache/Mysql/PHP)或FAMP(FreeBSD/Apache/Mysql/PHP),或者如果數(shù)據(jù)應(yīng)用足夠大,可以考慮換成PostgreSQL或Oracle,支持N種數(shù)據(jù)庫(kù)。(編號(hào)10)
2)語法簡(jiǎn)單,學(xué)C和Perl很容易,部分和ASP差不多。有成熟的開發(fā)工具,如NuPHPed、Zend Studio等。,而Eclipse可以在Linu臺(tái)下使用。
3)目前支持主流技術(shù),如WebServic: : DB作為數(shù)據(jù)庫(kù)抽象層,用Smarty或者smart template作為模板層,如果是PHP 5.1就用PDO(PHP數(shù)據(jù)對(duì)象)訪問數(shù)據(jù)庫(kù)。
5)有很多成熟的框架,比如phpMVC,Prado,Cake等等,支持MVC,類似事件驅(qū)動(dòng)的框架,像Ruby On Rails這樣的快速開發(fā)框架,足以滿足你的應(yīng)用需求。
6)PHP 5有成熟的面向?qū)ο篌w系,可以適應(yīng)基本的面向?qū)ο笠?。適合開發(fā)大型項(xiàng)目。
7)有成熟的社區(qū)支持PHP的開發(fā)。
8)目前很多大型應(yīng)用都使用PHP,比如淘寶、雅虎、163、新浪等大型門戶,很多都選擇PHP作為自己的開發(fā)語言,所以大型門戶都可以選擇,我覺得夠你用了。
9)有很多開源框架或者開源系統(tǒng)可以使用。比如大家熟知的開源框架有Zend Framework、CakePHP、CodeIgniter、symfony等。,開源論壇包括Discuz!、Phpwind等。、開源博客WordPress、開源網(wǎng)店系統(tǒng)如Ecshop、ShopEx等。開源SNS系統(tǒng)如UCHome、ThinkSNS等。
10)低成本(linux apache mysql php內(nèi)核)
2.不足之處
1)函數(shù)命名不規(guī)范駝峰法和滑移線,傳遞參數(shù)的位置不一樣,大家都知道。
2)單線程;PHP本身一直是單進(jìn)程程序;雖然php s pthreads擴(kuò)展早已存在。但是不夠穩(wěn)定,運(yùn)行起來會(huì)莫名其妙的掛掉;Php擴(kuò)展都是用c寫的,也就是說任何一個(gè)有線程競(jìng)爭(zhēng)資源控制問題的擴(kuò)展都能讓整個(gè)一個(gè)死掉。
3)核心異步網(wǎng)絡(luò)不支持(當(dāng)然linux中只有同步無阻塞網(wǎng)絡(luò)模型)。然而,缺乏這一點(diǎn)使得開發(fā)能夠承受大并發(fā)的網(wǎng)絡(luò)應(yīng)用程序變得困難。傳統(tǒng)網(wǎng)絡(luò)模型和io都被阻塞。這個(gè)基本的編程實(shí)踐是一個(gè)進(jìn)程(或線程)響應(yīng)一個(gè)用戶鏈接請(qǐng)求。所以不可能像實(shí)時(shí)網(wǎng)游那樣完成需要上千個(gè)網(wǎng)絡(luò)連接的任務(wù)。雖然php也有Libevent和eio擴(kuò)展在一定程度上彌補(bǔ)了這一點(diǎn),但感覺不是那么完美。
4)只支持web開發(fā),制作不方便。exe文件、桌面應(yīng)用程序和手機(jī)程序。
5)不適合做爬蟲,自動(dòng)運(yùn)行腳本和科學(xué)計(jì)算項(xiàng)目,這種語言的基本框架也不適合,雖然有很多實(shí)現(xiàn)。
6)后期維護(hù)困難。后期提速的空間有限。
在對(duì)PHP有了大致的了解之后,讓 讓我們理解為什么PHP很慢。
PHP的慢是相對(duì)于C/C級(jí)別語言而言的。事實(shí)上,PHP語言最初的設(shè)計(jì)并不是用來解決計(jì)算密集型的應(yīng)用場(chǎng)景。我們大致可以理解為PHP為了提高開發(fā)效率而犧牲執(zhí)行效率。
我們知道PHP的一個(gè)很大的特點(diǎn)就是弱類型化,也就是我可以隨意定義一個(gè)變量,隨意賦給各種類型的數(shù)據(jù)。以int整數(shù)為例,在C語言中:
int num 200//通常是4個(gè)字節(jié)。
但是,如果PHP定義了相同的變量,實(shí)際對(duì)應(yīng)的存儲(chǔ)結(jié)構(gòu)是:
這個(gè)結(jié)構(gòu)將比C變量占用更多的內(nèi)存,C變量在PHP中定義如下:
200澳元;//這個(gè)變量實(shí)際上會(huì)比C變量多占用很多倍的存儲(chǔ)空間。
事實(shí)上,對(duì)于PHP來說,無論存儲(chǔ)什么類型的數(shù)據(jù),都是通過上面提到的 "滅口 "結(jié)構(gòu)。為了兼容PHP程序員 變量類型,PHP對(duì)開發(fā)者友好,但對(duì)執(zhí)行引擎殘酷。單個(gè)變量的內(nèi)存消耗可能不明顯。一旦使用PHP數(shù)組,復(fù)雜度指數(shù)就會(huì)上升(數(shù)組的實(shí)現(xiàn)是HashTable)。然后,當(dāng)Zend engine執(zhí)行時(shí),它將這些PHP代碼編譯成操作碼(PHP中間字節(jié)碼,格式有點(diǎn)類似于匯編),由Zend引擎逐行解釋執(zhí)行。
無論是 字符串連接操作或數(shù)組的簡(jiǎn)單修改。;幾乎是 amp的節(jié)奏PHP程序員的一句話和Zend engine "。所以PHP相對(duì)于C來說,同樣的操作消耗更多的CPU、內(nèi)存等系統(tǒng)資源。另外還有內(nèi)存自動(dòng)回收,變量類型判斷等等,都會(huì)增加系統(tǒng)資源的消耗。
比如我用純PHP實(shí)現(xiàn)的快速排序函數(shù)和原生排序函數(shù),對(duì)一萬個(gè)整數(shù)進(jìn)行排序,進(jìn)行耗時(shí)的比較。結(jié)果如下:
原生sort需要3.44 ms,而我們自己的PHP函數(shù)sort需要68.79 ms我們發(fā)現(xiàn)兩者的實(shí)現(xiàn)效率差距巨大。我的測(cè)試方法是計(jì)算函數(shù)執(zhí)行前后的時(shí)間間隔,而不是整個(gè)PHP腳本從開始到結(jié)束的時(shí)間。PHP腳本的啟動(dòng)和關(guān)閉過程本身就有一系列的初始化和清理工作,也會(huì)占用大量的時(shí)間。
一般來說,PHP執(zhí)行效率的排名是:
最快的是PHP語言結(jié)構(gòu)(isset,echo等。),PHP語言的一部分(它們根本不是函數(shù))。
那么越快就是PHP的原生和擴(kuò)展功能。PHP擴(kuò)展,基于Zend API,用C實(shí)現(xiàn)的功能,執(zhí)行效率和C /Java屬于同一數(shù)量級(jí)。
什么?;真正慢的是我們通過PHP編寫自己的代碼和函數(shù)。比如我們用純PHP實(shí)現(xiàn)的比較重的框架,因?yàn)榭蚣鼙旧淼哪K比較多,明顯會(huì)拖累語言層面的執(zhí)行效率,占用內(nèi)存比較多。(國(guó)內(nèi)的Yaf框架是用擴(kuò)展的實(shí)現(xiàn)的,所以執(zhí)行效率比純PHP編寫的框架快很多。
一般來說,我們不。;不推薦用PHP實(shí)現(xiàn)邏輯復(fù)雜的計(jì)算類型的功能,尤其是在Web系統(tǒng)流量比較大的場(chǎng)景下。所以PHP程序員應(yīng)該對(duì)PHP的各種原生函數(shù)和擴(kuò)展有廣泛的了解,在具體的功能實(shí)現(xiàn)場(chǎng)景中尋求更多的原生解決方案(原生接口或擴(kuò)展),而不是寫一堆復(fù)雜的PHP代碼來實(shí)現(xiàn)這類功能。
如果有足夠的PHP擴(kuò)展開發(fā)實(shí)力,將這類業(yè)務(wù)功能改寫成PHP擴(kuò)展也會(huì)大大提高代碼的執(zhí)行效率。這是一個(gè)非常好的方法,廣泛應(yīng)用于PHP優(yōu)化。但是自己寫的PHP業(yè)務(wù)開發(fā)的缺點(diǎn)也很明顯:
擴(kuò)展開發(fā)時(shí)間長(zhǎng),需求變化時(shí)修改復(fù)雜。寫的不好可能會(huì)影響Web服務(wù)的穩(wěn)定性。(比如Apache的worker模式,在多線程場(chǎng)景中掛起會(huì)影響到同一個(gè)進(jìn)程中的其他正常子線程。如果是多線程Web模式,寫擴(kuò)展也需要支持線程安全)
當(dāng)擴(kuò)展PHP版本升級(jí)時(shí),您可以可能需要做額外的兼容工作。
后的維護(hù)和接管成本也比較高。
其實(shí)在互聯(lián)網(wǎng)一線企業(yè)中,比較常見的解決方案不是增加PHP的擴(kuò)展,而是用C/C獨(dú)立編寫一個(gè)服務(wù)服務(wù)器,然后PHP通過sock
為什么頭條能存儲(chǔ)那么多視頻文字,幾億用戶,得多大存儲(chǔ)空間啊?
堆疊硬盤。算法對(duì)于節(jié)省空間,減少帶寬壓力非常重要。
首先,技術(shù)當(dāng)然足夠強(qiáng)大!其次,你可能不理解的是,別人能處理這么多事情,為什么還能這么快呈現(xiàn)內(nèi)容和內(nèi)容的準(zhǔn)確性!時(shí)效性!
根據(jù)我的理解,首先,并不缺少存儲(chǔ)用的硬盤生產(chǎn)。即使狂潮興起,企業(yè)幾乎沒有無法滿足的硬盤需求。所以數(shù)據(jù)中心能存儲(chǔ)這么多數(shù)據(jù)是沒有問題的。
也許你會(huì)說這么多人同時(shí)訪問硬盤速度不卡。那個(gè) 關(guān)于硬盤的讀寫速度。硬盤陣列做出來后,硬盤的讀寫速度可以疊加。所以要達(dá)到這個(gè)要求,只要硬盤陣列技術(shù)做好就沒有問題。
最后,你可能會(huì)問,這么多人上網(wǎng)怎么受得了?其實(shí)對(duì)于大型企業(yè)來說,服務(wù)器都是集群化的,也就是說一堆服務(wù)器在同事中運(yùn)行。如果每臺(tái)服務(wù)器都能負(fù)責(zé)幾十萬人的并發(fā)訪問,只要增加足夠多的服務(wù)器,就能應(yīng)對(duì)更大數(shù)量級(jí)的用戶群!
對(duì)于自己的眼光我只能回答這么多!希望能幫到你!
最不值錢的是存儲(chǔ)??磦€(gè)人硬盤的價(jià)格。一個(gè)T要400元,兩個(gè)T要500多元,四個(gè)T要700多元。雖然專業(yè)存儲(chǔ)更貴,但道理是一樣的。存儲(chǔ)量越大,單價(jià)越低。
最有價(jià)值的是算法,分布式數(shù)據(jù)庫(kù),分布式存儲(chǔ),可以讓用戶秒開。
當(dāng)然儲(chǔ)存量很大,但是分散在幾個(gè)中心,幾十萬噸起,但是這個(gè)錢和他們賺的錢比起來不算多。
因?yàn)殄X
在,idc最貴的就是帶寬。
只要你有錢。