2012-02-21 78 views
3

我需要建立一個系統(在PHP),做對MSSQL大量的查詢檢索結果如下:最好的辦法異步處理在PHP

我有我需要運行時,10個獨立的查詢用戶訪問一個頁面(有些是巨大的)。並行運行3個查詢的可伸縮性最高的解決方案(隊列中的7個)以及查詢完成後,從隊列中運行另一個?

我需要立即加載頁面,並且隨着查詢結束,向用戶顯示該查詢的響應(順序並不那麼重要)。我考慮了:AJAX,beanstalkd,NodeJS,libevent和Gearman,或者在java中使用線程和並行處理來實現它作爲web服務。

PS:我也發現AJAX PUSH ENGINE (APE - http://www.ape-project.org/)xRML (http://www.xrtml.org/)但從來沒有使用過

+0

有人在您的問題中將SQL更改爲MSSQL(所以我將其標記爲SQL-Server)您實際使用的是哪種類型的數據庫? – 2012-02-21 11:49:38

+0

對不起,這是我..我正在使用MSSQL – pufos 2012-02-21 12:13:09

回答

1

注意這個答案對於那些沒有特別

MySQL的要求MSSQL問題的第一次修訂支持異步使用mysqlnd驅動程序時通過MySQLi查詢。

通過MYSQLI_ASYNC(與mysqlnd一起提供)作爲$resultmode參數到mysqli_query()異步執行查詢。然後使用mysqli_poll()mysqli_reap_async_query()從這些查詢中獲得結果。

另請參閱http://blog.ulf-wendel.de/?p=170深入討論mysqlnd的並行,後臺和異步獲取想法。

+0

感謝您的回答 – pufos 2012-02-21 10:56:28

+0

你也可以使用這個MSSQL? – 2012-02-21 11:30:40

+0

@MattEllen no。 ext/mysqli用於MySql數據庫。我不知道MSSQL是否支持通過ext/mssql進行異步查詢。它看起來不像文檔。 – Gordon 2012-02-21 11:45:50

1

我的解決方案是將查詢作業放到beanstalk消息隊列中,由後臺進程(守護進程?)提供服務。隨着作業完成,結果集被緩存在某處。

加載的頁面使用AJAX(在一種輪詢循環中 - 例如,每10秒請求一次)從服務器端應用程序中查找結果是否準備好(它通過在緩存中查找結果組)。

當結果變得可用時,服務器端應用程序將它們發送到將它們加載到div的頁面。

+0

你的意思是AJAX長時間拉? AJAX是檢索結果並動態更新頁面的唯一解決方案? – pufos 2012-02-21 10:52:10