欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP 中執(zhí)行排序與 MySQL 中排序

 更新時間:2009年04月21日 18:24:22   作者:  
這篇文章是dragon 朋友來郵探討后他做的一個總結(jié)。在 DB 中排序還是在 應(yīng)用程序中排序是個很有趣的話題,dragon 第一份郵件中其實已經(jīng)總結(jié)的很好了,我添加了一點建議而已。
此文首發(fā)在 InfoQ 中文站作者:明靈(dragon) , Fenng . Note:要轉(zhuǎn)載的朋友請注意注明這篇文章的第一作者!
這篇文章是dragon 朋友來郵探討后他做的一個總結(jié)。在 DB 中排序還是在 應(yīng)用程序中排序是個很有趣的話題,dragon 第一份郵件中其實已經(jīng)總結(jié)的很好了,我添加了一點建議而已?,F(xiàn)在放上來,與大家共享。這篇文章也投稿到了 InfoQ 中文站

Q:列出在 PHP 中執(zhí)行排序要優(yōu)于在 MYSQL 中排序的原因?給一些必須在MYSQL中排序的實例?

A:通常來說,執(zhí)行效率需要考慮 CPU、內(nèi)存和硬盤等的負(fù)載情況,假定 MYSQL 服務(wù)器和 PHP 的服務(wù)器都已經(jīng)按照最適合的方式來配置,那么系統(tǒng)的可伸縮性(Scalability)和用戶感知性能(User-perceived Performance)是我們追求的主要目標(biāo)。在實際運行中,MYSQL 中數(shù)據(jù)往往以 HASH tables、BTREE 等方式存貯于內(nèi)存,操作速度很快;同時 INDEX 已經(jīng)進(jìn)行了一些預(yù)排序;很多應(yīng)用中,MYSQL 排序是首選。而在應(yīng)用層(PHP)中排序,也必然在內(nèi)存中進(jìn)行,與 MYSQL 相比具有如下優(yōu)勢:

  • 1、 考慮整個網(wǎng)站的可伸縮性和整體性能,在應(yīng)用層(PHP)中排序明顯會降低數(shù)據(jù)庫的負(fù)載,從而提升整個網(wǎng)站的擴展能力。而數(shù)據(jù)庫的排序,實際上成本是非常高的,消耗內(nèi)存、CPU,如果并發(fā)的排序很多,DB 很容易到瓶頸。
  • 2、 如果在應(yīng)用層(PHP)和MYSQL之間還存在數(shù)據(jù)中間層,合理利用,PHP會有更好的收益。
  • 3、 PHP在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)專門針對具體應(yīng)用來設(shè)計,比數(shù)據(jù)庫更為簡潔、高效;
  • 4、 PHP不用考慮數(shù)據(jù)災(zāi)難恢復(fù)問題,可以減少這部分的操作損耗;
  • 5、 PHP不存在表的鎖定問題;
  • 6、 MYSQL中排序,請求和結(jié)果返回還需要通過網(wǎng)絡(luò)連接來進(jìn)行,而PHP中排序之后就可以直接返回了,減少了網(wǎng)絡(luò)IO。

至于執(zhí)行速度,差異應(yīng)該不會很大,除非應(yīng)用設(shè)計有問題,造成大量不必要的網(wǎng)絡(luò)IO。另外,應(yīng)用層要注意PHP 的 Cache 設(shè)置,如果超出會報告內(nèi)部錯誤;此時要根據(jù)應(yīng)用做好評估,或者調(diào)整Cache。具體選擇,將取決于具體的應(yīng)用。

列出一些 PHP 中執(zhí)行排序更優(yōu)的情況:

  • 1、 數(shù)據(jù)源不在 MYSQL 中,存在硬盤、內(nèi)存或者來自網(wǎng)絡(luò)的請求等;
  • 2、 數(shù)據(jù)存在 MYSQL 中,量不大,而且沒有相應(yīng)的索引,此時把數(shù)據(jù)取出來用PHP排序更快;
  • 3、 數(shù)據(jù)源來自于多個 MYSQL 服務(wù)器,此時從多個 MYSQL 中取出數(shù)據(jù),然后在PHP中排序更快;
  • 4、 除了 MYSQL 之外,存在其他數(shù)據(jù)源,比如硬盤、內(nèi)存或者來自網(wǎng)絡(luò)的請求等,此時不適合把這些數(shù)據(jù)存入 MYSQL 后再排序;

列出一些必須在 MYSQL 中排序的實例:

  • 1、 MYSQL 中已經(jīng)存在這個排序的索引;
  • 2、 MYSQL 中數(shù)據(jù)量較大,而結(jié)果集需要其中很小的一個子集;比如 1000000 行數(shù)據(jù),取TOP 10;
  • 3、 對于一次排序、多次調(diào)用的情況,比如統(tǒng)計聚合的情形,可以提供給不同的服務(wù)使用,那么在 MYSQL 中排序是首選的。另外,對于數(shù)據(jù)深度挖掘,通常做法是在應(yīng)用層做完排序等復(fù)雜操作,把結(jié)果存入MYSQL即可,便于多次使用。
  • 4、 不論數(shù)據(jù)源來自哪里,當(dāng)數(shù)據(jù)量大到一定的規(guī)模后,由于占用內(nèi)存/Cache 的關(guān)系,不再適合 PHP 中排序了;此時把數(shù)據(jù)復(fù)制、導(dǎo)入或者存在 MYSQL ,并用 INDEX 優(yōu)化,是優(yōu)于 PHP 的。不過,用 Java,甚至 C++ 來處理這類操作會更好。 [有些類似大數(shù)據(jù)集聚合或者匯總的數(shù)據(jù),在客戶端排序得不償失。當(dāng)然,也有用類似搜索引擎的思路來解決類似應(yīng)用的情況。]

從網(wǎng)站整體考慮,就必須加入人力和成本的考慮。假如網(wǎng)站規(guī)模和負(fù)載較小,而人力有限(人數(shù)和能力都可能有限),此時在應(yīng)用層(PHP)做排序要做不 少開發(fā)和調(diào)試工作,耗費時間,得不償失;不如在 DB 中處理,簡單快速。對于大規(guī)模的網(wǎng)站,電力、服務(wù)器的費用很高,在系統(tǒng)架構(gòu)上精打細(xì)算,可以節(jié)約大量的費用,是公司持續(xù)發(fā)展之必要;此時如果能在應(yīng)用層(PHP) 進(jìn)行排序并滿足業(yè)務(wù)需求,盡量在應(yīng)用層進(jìn)行。

相關(guān)文章

  • PHP數(shù)組訪問常用方法解析

    PHP數(shù)組訪問常用方法解析

    這篇文章主要介紹了PHP數(shù)組訪問常用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • PHP排序算法系列之歸并排序詳解

    PHP排序算法系列之歸并排序詳解

    這篇文章主要為大家詳細(xì)介紹了PHP排序算法系列之歸并排序的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • php常見的網(wǎng)絡(luò)攻擊及防御方法

    php常見的網(wǎng)絡(luò)攻擊及防御方法

    這篇文章主要介紹了php常見的網(wǎng)絡(luò)攻擊及防御方法,對網(wǎng)絡(luò)安全感興趣的同學(xué),可以參考下
    2021-04-04
  • php結(jié)合web uploader插件實現(xiàn)分片上傳文件

    php結(jié)合web uploader插件實現(xiàn)分片上傳文件

    這篇文章主要為大家詳細(xì)介紹了php結(jié)合web uploader插件實現(xiàn)分片上傳文件, 采用大文件分片并發(fā)上傳,極大的提高了文件上傳效率,感興趣的小伙伴們可以參考一下
    2016-05-05
  • PHP定界符的使用及注意事項

    PHP定界符的使用及注意事項

    這篇文章主要給大家介紹了關(guān)于PHP定界符的使用及注意事項的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • PHP簡單檢測網(wǎng)址是否能夠正常打開的方法

    PHP簡單檢測網(wǎng)址是否能夠正常打開的方法

    這篇文章主要介紹了PHP簡單檢測網(wǎng)址是否能夠正常打開的方法,涉及php中curl的簡單使用技巧,需要的朋友可以參考下
    2016-09-09
  • PHP驗證碼無法顯示的原因及解決辦法

    PHP驗證碼無法顯示的原因及解決辦法

    這篇文章主要介紹了PHP驗證碼無法顯示的原因及解決辦法的相關(guān)資料,這里說明了如何出現(xiàn)無法顯示的原因及相應(yīng)的解決辦法,需要的朋友可以參考下
    2017-08-08
  • PHP中錯誤與異常的日志記錄用法分析

    PHP中錯誤與異常的日志記錄用法分析

    這篇文章主要介紹了PHP中錯誤與異常的日志記錄用法,較為詳細(xì)的分析了php中錯誤與異常的區(qū)別以及日志記錄的相應(yīng)使用技巧,需要的朋友可以參考下
    2016-08-08
  • 關(guān)于更改Zend Studio/Eclipse代碼風(fēng)格主題的介紹

    關(guān)于更改Zend Studio/Eclipse代碼風(fēng)格主題的介紹

    本篇文章是對關(guān)于更改Zend Studio/Eclipse代碼風(fēng)格主題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP數(shù)字格式化

    PHP數(shù)字格式化

    PHP數(shù)字格式化...
    2006-12-12

最新評論