使用Qt框架减少多线程应用程序中数据库连接的最佳策略

时间:2012-03-05 09:36:01

标签: c++ mysql multithreading qt

我有一台与很多设备通信的服务器(> 1000)。每个连接都有自己的线程。现在,我意识到我必须设置我的mysql配置以允许> 1000开放并发连接,在我看来这似乎是一个非常糟糕的主意。

Qt docs说每个线程都需要自己的连接:http://qt-project.org/doc/qt-4.8/threads-modules.html#threads-and-the-sql-module

所以,我必须致电

 QSqlDatabase::addDatabase("QMYSQL", "thread specific string");

在每个帖子中。

这里的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

我认为某种资源池在这里是合适的。

根据> 1000设备线程的数据库工作负载,单个数据库线程可以管理它,或者您需要多个数据库线程。

然后设置从设备线程到数据库线程的排队系统,设备推送工作,数据库线程关闭工作单元并执行查询。

我刚刚意识到我只是想像某种日志一样写入数据库,如果你正在做的是从数据库读取并写入设备,这个想法可能无法修改。

答案 1 :(得分:0)

  1. 老实说,我对QT了解不多,但如果我一般地解决你的问题,那么我会建议你创建一个“连接池”
  2. 如果您不想或不能实现连接池,那么可以增加MySQL配置中的Max_Connections并将其保留在MySQL上,它有自己的连接池机制。