天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

此文首發(fā)在 InfoQ 中文站。作者:明靈(dragon) , Fenng . Note:要轉(zhuǎn)載的朋友請(qǐng)注意注明這篇文章的第一作者!
這篇文章是dragon 朋友來(lái)郵探討后他做的一個(gè)總結(jié)。在 DB 中排序還是在 應(yīng)用程序中排序是個(gè)很有趣的話題,dragon 第一份郵件中其實(shí)已經(jīng)總結(jié)的很好了,我添加了一點(diǎn)建議而已。現(xiàn)在放上來(lái),與大家共享。這篇文章也投稿到了 InfoQ 中文站 。

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

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

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

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

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

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

列出一些必須在 MYSQL 中排序的實(shí)例:

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

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

php技術(shù)PHP 中執(zhí)行排序與 MySQL 中排序,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 妈妈的职业3完整版在线播放 | 丰满艳妇亲伦 | 日本老师xxxxx18 | 美国一级大黄一片免费的网站 | 成人永久免费视频网站在线观看 | 男人的天堂黄色片 | 国产专区亚洲欧美另类在线 | 久久香蕉国产免费天天 | 欧美黄色第一页 | 日本亚洲精品无码区国产电影 | 2021国产精品视频一区 | 久久久96人妻无码精品蜜桃 | 国产成人AV永久免费观看 | 被高跟鞋调教丨vk | 久久这里只有精品国产精品99 | 美女与男人对肌免费网站 | 99九九精品国产高清自在线 | 韩国甜性涩爱 | 狠狠色狠狠色综合系列 | 绞尽奶汁by菊花开 | 精品少妇爆AV无码专区 | 久久综合亚洲色hezyo | 午夜影视不充值观看 | 手机国产视频福利 | 野花日本大全免费高清完整版 | 我的美女奴隶 | 久久精品一卡二卡三卡四卡视频版 | 十九禁啊啪射视频在线观看 | 糙汉顶弄抽插HHHH | 精品国产在线观看福利 | 暖暖 免费 高清 日本视频大全 | 中国成人在线视频 | 视频一区二区中文字幕 | 久久久无码精品亚洲日韩按摩 | 久久精品免费看网站 | 寻找最美乡村教师颁奖晚会 | 国产人妻人伦精品9 | 国产成人高清精品免费观看 | 爱啪国产精品视频在线 | 国产亚洲精品第一区香蕉 | 最新国产精品福利2020 |