久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP并發(fā)查詢MySQL的實例代碼

本篇文章主要介紹了PHP并發(fā)查詢MySQL的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近在研究PHP,很喜歡,碰到PHP并發(fā)查詢MySQL的問題,研究了一下,順便留個筆記:

同步查詢

這是我們最常的調(diào)用模式,客戶端調(diào)用Query[函數(shù)],發(fā)起查詢命令,等待結(jié)果返回,讀取結(jié)果;再發(fā)送第二條查詢命令,等待結(jié)果返回,讀取結(jié)果。總耗時,會是兩次查詢的時間之和。簡化一下過程,例如下圖:

PHP并發(fā)查詢MySQL的實例代碼 

例圖,由1.1到1.3為一個Query[函數(shù)]的調(diào)用,兩次查詢,就要串行經(jīng)歷1.1、1.2、1.3、2.1、2.2、2.3,尤其在1.2和2.2會阻塞等待,進程沒法做其他事情。

同步調(diào)用的好處是,符合我們的直觀思維,調(diào)用和處理都簡單。缺點是進程阻塞在等待結(jié)果返回,增加額外的運行時間。
如果,有多條查詢請求,或者進程還有其他的事情處理,那么能否把等待的時間也合理利用起來,提高進程的處理能力呢,顯然是可以的。

拆分

現(xiàn)在,我們把Query[函數(shù)]打碎,客戶端在1.1后,馬上返回,客戶端跳過1.2,在1.3有數(shù)據(jù)達到后再去讀取數(shù)據(jù)。這樣進程在原來的1.2階段就解放了,可以做更多的事情,例如…再發(fā)起一條sql查詢[2.1],是否看到了并發(fā)查詢的雛形了。

并發(fā)查詢

相對于同步查詢的下一條查詢的發(fā)起都在上一條完成后,并發(fā)查詢,可以在上一條查詢請求發(fā)起后,立刻發(fā)起下一條查詢請求。簡化一下過程,下圖:

PHP并發(fā)查詢MySQL的實例代碼 

例圖,在1.1.1成功發(fā)送完請求后,立馬返回[1.1.2],最終查詢結(jié)果的返回時在遙遠的1.2 。但是在,1.1.1到1.2中間,還發(fā)起了另一個查詢請求,這時間段內(nèi),就同時發(fā)起了兩條查詢請求,2.2先于1.2到達,那么兩條查詢的總耗時,只相當于第一條查詢的時間。

并發(fā)查詢的優(yōu)點是,可以提高進程的使用率,避免阻塞等待服務(wù)器處理查詢,縮短了多條查詢的耗時。但缺點也很明顯,發(fā)起N條并發(fā)查詢,就需要建立N條數(shù)據(jù)庫鏈接,對于有數(shù)據(jù)庫連接池的應(yīng)用來說,可以避免這種情況。

退化

理想情況下,我們希望并發(fā)N條查詢,總耗時等于查詢時間最長的一條查詢。但也有可能并發(fā)查詢會[退化]為[同步查詢]。What?例圖中,如果1.2在2.1.1前就返回了,那么并發(fā)查詢就[退化]為[同步查詢]了,但付出的代價卻比同步查詢要高。

多路復(fù)用

  • 發(fā)起query1
  • 發(fā)起query2
  • 發(fā)起query3
  • ………
  • 等待query1、query2、query3
  • 讀取query2結(jié)果
  • 讀取query1結(jié)果
  • 讀取query3結(jié)果

那么,怎么等待知道什么時候查詢結(jié)果返回了,又是哪個的查詢結(jié)果返回呢?

對每個查詢IO調(diào)用read?如果是遇上阻塞IO,這樣就會阻塞在一個IO上,其他IO有結(jié)果返回了,也沒法處理。那么,如果是非阻塞IO,那不用怕會阻塞在其中一個IO上了,確實是,但又會造成不斷地輪詢判斷,浪費CPU資源。

對于這種情況可以使用多路復(fù)用輪詢多個IO。

PHP實現(xiàn)并發(fā)查詢MySQL

PHP的mysqli(mysqlnd驅(qū)動)提供多路復(fù)用輪詢IO(mysqli_poll)和異步查詢(MYSQLI_ASYNC、mysqli_reap_async_query),使用這兩個特性實現(xiàn)并發(fā)查詢,示例代碼:

<?php
 $sqls = array(
  'SELECT * FROM `mz_table_1` LIMIT 1000,10',
  'SELECT * FROM `mz_table_1` LIMIT 1010,10',
  'SELECT * FROM `mz_table_1` LIMIT 1020,10',
  'SELECT * FROM `mz_table_1` LIMIT 10000,10',
  'SELECT * FROM `mz_table_2` LIMIT 1',
  'SELECT * FROM `mz_table_2` LIMIT 5,1'
 );
 $links = [];
 $tvs = microtime();
 $tv = explode(' ', $tvs);
 $start = $tv[1] * 1000 + (int)($tv[0] * 1000);
 // 鏈接數(shù)據(jù)庫,并發(fā)起異步查詢
 foreach ($sqls as $sql) { 
  $link = mysqli_connect('127.0.0.1', 'root', 'root', 'dbname', '3306');
  $link->query($sql, MYSQLI_ASYNC); // 發(fā)起異步查詢,立即返回
  $links[$link->thread_id] = $link;
 }
 $llen = count($links);
 $process = 0;
 do {
  $r_array = $e_array = $reject = $links;
  // 多路復(fù)用輪詢IO
  if(!($ret = mysqli_poll($r_array, $e_array, $reject, 2))) {
   continue;
  }
  // 讀取有結(jié)果返回的查詢,處理結(jié)果
  foreach ($r_array as $link) {
   if ($result = $link->reap_async_query()) {
    print_r($result->fetch_row());
    if (is_object($result))
     mysqli_free_result($result);
   } else {
   }
   // 操作完后,把當前數(shù)據(jù)鏈接從待輪詢集合中刪除
   unset($links[$link->thread_id]);
   $link->close();
   $process++;
  }
  foreach ($e_array as $link) {
   die;
  }
  foreach ($reject as $link) {
   die;
  }
 }while($process < $llen);
 $tvs = microtime();
 $tv = explode(' ', $tvs);
 $end = $tv[1] * 1000 + (int)($tv[0] * 1000);
 echo $end - $start,PHP_EOL;
【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實例形式分析了php實現(xiàn)針對有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現(xiàn)APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現(xiàn)的多維數(shù)組排序算法,結(jié)合實例形式對比分析了php針對多維數(shù)組及帶有鍵名的多維數(shù)組進行排序相關(guān)操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結(jié)合ajaxuploadfile實現(xiàn)無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發(fā)接口使用RSA進行加密解密方法,對此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 久久视频免费在线观看 | 国产一区二区自拍 | 超碰av在线播放 | 欧美性猛交xxxx免费看久久久 | 日本一区二区不卡视频 | www.99色 | 成人在线精品 | 91精品国产日韩91久久久久久 | 亚洲特黄| av免费观看在线 | 欧美色图一区二区 | 国产精品区二区三区日本 | 亚洲成肉网 | 91精品国产麻豆国产自产在线 | 亚洲综合精品 | 91亚洲国产成人久久精品网站 | 欧美黄色免费网站 | 黄色一级影片 | 激情av网| 欧美一区二区三区在线 | 中文字幕第一页在线 | 久久国产精品99久久人人澡 | 涩久久 | 国产日韩欧美亚洲 | 一级大片免费看 | 久草福利在线观看 | 日韩高清一区二区 | 国产精品理论 | 亚洲欧美日韩精品 | av一区二区在线观看 | 国产一区二区三区视频 | 国产日韩欧美日韩大片 | 黄色大片av | 国产精品美女 | 成人午夜av| 黄色天天影视 | 欧美日韩精品一区二区 | 一级特黄妇女高潮 | 欧美一级淫片bbb一84 | 黄色片国产 | 久久精品一|