2008-09-01 131 views

回答

7

http://forums.mysql.com/read.php?45,183339,183339 享受

更新鏈接到原始文章展示瞭如何做異步的MySQL查詢:

http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/

+1

阻塞連接在這個實現中是一個嚴重的問題,但似乎是做我最初的要求。毛毛雨項目(https://launchpad.net/drizzle)正在開發一個異步客戶端,它將與Mysql向後兼容(這裏提到:http://www.oddments.org/?p=20) – 2008-10-09 08:05:21

0

我認爲唯一的解決方案是創建一個包裝standard connector的異步服務。你需要了解ODBC API。

2

我有一個非常不同的技術類似的問題:Twisted python(基於reactor的IO)和sqlAlchemy(??)。在尋找解決方案時,我發現了一個sAsync項目,它爲sqlAlchemy創建了一個單獨的線程,然後響應請求。由於ASIO基於低級操作系統功能(如aio_read()或ReadFileEx()等)和OS級反應器(或Windows的情況下的proactor),所以我認爲你不會有另一個機會而不是通過類似的手段來模擬「異步性」。

運行中的線程同步連接器是不是一種選擇

想想吧:libmysqlclient/mysqlclient.dll你使用使得同步套接字調用。操作系統調度程序將正確切換到另一個線程,直到I/O完成,所以有什麼區別? (除了你不應該爲此做2k線程..)

編輯:mysql_real_connect()支持一個UNIX套接字參數。你可以從MySQL服務器端口讀取自己的數據,並使用ASIO寫入該UNIX套接字。就像一個代理服務器。

1

[運行中的線程同步連接器是不是一種選擇 想想看:在的libmysqlclient /你使用mysqlclient.dll使得同步套接字調用。操作系統調度程序將正確切換到另一個線程,直到I/O完成]

這是在煩我! - 「另一個線程」可以輕鬆地進行第二次同步。連接到mysql,應該由mysql處理,就像它將另一個客戶端一樣?我的感覺是它應該使用多線程工作。

+1

它將在線程中工作。但是可以說,你希望與一臺或多臺服務器建立100個連接。不是我想象任何人會這樣做,但爲了爭論而接受它。我應該旋轉100個線程(或者甚至只有10個線程池)?這是相當大的開銷。 – 2008-10-02 13:38:44

0

你有沒有考慮使用libdrizzle?我只使用過一箇舊版本,當時它是一個來自毛毛雨的單獨項目,我測試了異步查詢功能,但是我從未做過任何值得一提的實際基準測試。

+0

我已經採用當我創建這個問題時,快速瀏覽Drizzle項目(請參閱我的評論以接受答案)。那時他們正在進行一個異步客戶端。我真的不知道結果如何。 – 2011-06-03 08:12:37