當前位置:才華齋>計算機>php語言>

PHP 中 MySQL 資料庫非同步查詢實現

php語言 閱讀(2W)

通常一個web應用的效能瓶頸在資料庫。因為,通常情況下PHP中mysql查詢是序列的。也就是說,如果指定兩條sql語句時,第二條sql語句會等到第一條sql語句執行完畢再去執行。這個時候,如果執行2條sql語句,每條執行時間為50ms,全部執行完畢可能需要100ms。既然,主要原因是sql的序列執行導致。那我們是不是可以改變執行方式來提高效能呢?答案是,可以的。我們可以通過非同步執行的'方式來提高效能。

PHP 中 MySQL 資料庫非同步查詢實現
PHP 中 MySQL 資料庫非同步查詢實現

非同步

如果通過非同步的方式去執行,可能效能會有很大提升。如果是採用非同步的方式,兩條sql語句會併發執行,可能就需要60ms就可以執行完畢。

實現

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

mysqlnd_async_query 傳送查詢請求

mysqlnd_reap_async_query 獲取查詢結果

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

實現程式碼如下:

結語

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