我有一個服務器可以與很多設備(> 1000)進行通信。每個連接都有自己的線程。現在,我意識到我將不得不將我的mysql配置設置爲允許> 1000開放併發連接,在我看來這似乎是一個非常糟糕的主意。在使用Qt框架的多線程應用程序中減少數據庫連接的最佳策略
的Qt文檔說,每一個線程需要它自己的連接:http://qt-project.org/doc/qt-4.8/threads-modules.html#threads-and-the-sql-module
所以,我要叫
QSqlDatabase::addDatabase("QMYSQL", "thread specific string");
在每一個線程。
這裏的最佳做法是什麼?
謝謝你的時間。 1 .:使用qt連接池機制將只允許在一個線程內部有多個連接。所以,這在這裏沒有幫助。 2 .: max_connections> 1000?這是一個真正的選擇,還是創建/終止連接會使服務器癱瘓?你有什麼想法「擁有自己的連接池」?請詳細說明一下,你是指像SQL Relay這樣的額外服務,還是你所指的功能已經是mysql核心本身的一部分? – spikey 2012-03-05 10:03:47
獲取我的知識MySQL具有嵌入式連接池,即您不需要MySQL的另一個實例,而是可以爲您處理共享池。但請記住,連接池可用於空閒連接,即如果某個線程創建了某個連接並且未使用,則其他線程可能會使用該連接。但在最壞的情況下,如果所有線程都連續使用分配的連接,則可以使用最大MAX_CONNECTIONS連接。 – 2012-03-05 10:13:21
這聽起來很有希望。現在,我只需要知道我在qt中必須做什麼才能讓mysql服務知道連接處於空閒狀態:您認爲'QSqlDatabase :: close()'應該完成這項工作嗎?我想知道,如果我在連接線程中接收到的每個數據包上打開/關閉數據庫連接,是否會出現問題。感謝您的任何意見。 – spikey 2012-03-05 10:27:18