我有一个服务器可以与很多设备(> 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