mysqlnd乙個很不錯的驅動

2021-07-05 19:45:52 字數 1671 閱讀 8333

最近,閒來無事在網上查詢資料資訊時見到有針對於mysql查詢可以進行非同步化,十分感興趣,於是特別的搜了一下,facebook最早是使用hack才得以實現但是現在的php5.5,已經無需hack就可以實現了。

簡單的說一下對於web**的效能來說,瓶頸多半是來自於資料庫。一般資料庫查詢會在某個請求的整體耗時中佔很大比例。在有甚者可能造成服務請求超時。以往長做的操作是對於資料庫的一系列優化,其實都是為了提高資料庫的查詢效率,這樣**整體響應的時間會有很大的提公升。但如果在這些之上能實現mysql查詢的非同步化,就可以實現多條sql語句同時執行。這樣就可以更加大大縮短mysql查詢的耗時。畢竟並行永遠會比序列的效率高,而且當查詢語句的執行時間越長 這個並行的效果也就是越明顯。

mysqli + mysqlnd。php官方實現的mysqlnd中提供了非同步查詢的方法。分別是:

mysqlnd_async_query 傳送查詢請求

mysqlnd_reap_async_query 獲取查詢結果

這樣就可以不必每次傳送完查詢請求後,一直阻塞等待查詢結果了。

實現**如下(該**非原創):

<?php

$host = '127.0.0.1';

$user = 'root';

$password = '';

$database = 'test';

/*** 期望得到額結果

* array(

* 1 => int,

* 2 => int,

* 3 => int

* )*/$result = array(1=>0, 2=>0, 3=>0);

//非同步方式[併發請求]

$time_start = microtime(true);

$links = array();

foreach ($result as $key=>$value)

$done = 0;

$total = count($links);

foreach ($links as $value) ", mysqli_async);}

do

$read = $errors = $reject = $tmp;

$re = mysqli_poll($read, $errors, $reject, 1);

if (false === $re) elseif ($re < 1)

foreach ($read as $link) else

$done++;

}foreach ($errors as $link)

foreach ($reject as $link)

} while ($done<$total);

var_dump($result);

echo "async_query_time:", microtime(true)-$time_start, "\n";

$link = end($links);

$link = $link['link'];

echo "\n";

當然了 ,

mysql資料庫對於每個查詢請求都是單獨啟動乙個執行緒進行處理。如果mysql伺服器啟動執行緒過多,必然會造成執行緒切換引起系統負載過高。所以如果在mysql資料庫負載不高的情況下,使用非同步查詢還是不錯的選擇。

乙個很不錯的遠端軟體TeamViewer

teamviewer teamviewer是乙個能在任何防火牆和nat 的後台用於遠端控制,桌面共享 和檔案傳輸的簡單且快速的解決方案。為了連線到另一台計算機,只需要在兩台計算機上同時執行 teamviewer 即可,而不需要進行安裝 也可以選擇安裝,安裝後可以設定開機執行 該軟體第一次啟動在兩台計...

很不錯的文章

身邊經常可見奇形怪狀的男子。打扮時髦,出手大方,善於與女子曖昧,周轉靈活,腦筋清楚,身上卻不見任何承擔的重量。有些尚且自戀到一定程度,全身上下的名牌,告訴你他的鞋子購自普拉達,衣服來自polo。也能暢談一下哲學或者人生道理,時不時亮出無從考證的身份,炫耀左右逢源,家底豐厚的能力。男人無趣到只能以吹噓...

很不錯的心裡測試

場景 你在森林的深處,你向前走,看見前面有一座很舊的小屋。1 這個小屋的門現在是什麼狀態?開著 關著 2 你走進屋子裡看見一張桌子這個桌子是什麼形狀的?圓形 橢圓形 正方形 長方形 三角形 3 在桌子上有個花瓶,瓶子裡有水,有多少水在花瓶裡?滿的 一半 空的 4 這個瓶子是由什麼材料製造的?玻璃 陶...