我正在构建我的第一个单生产者/单一消费者应用程序,其中消费者将项目从队列中取出并将它们存储在MySQL数据库中。
以前,当它是单线程应用程序时,我会打开与数据库的连接,发送查询,关闭连接,并在每次有新信息时重复。
使用生产者 - 消费者设置,处理数据库连接的更好方法是什么?我应该在开始消费者循环之前打开它一次(我看不出这个问题,但我确定你们中的一个好人会指出它有没有)?或者我应该在循环的每次迭代中打开和关闭数据库连接(似乎浪费时间和资源)?
该软件在大约30台小型Linux计算机上运行,并且所有这些计算机都与同一个数据库通信。我没有看到30个同时连接成为问题,但我很想听听你的想法。
道歉,如果这已经被覆盖,我无法在任何地方找到它。如果有,链接将是太棒了。谢谢!
编辑清晰度 我主要关注的是消费者线程的速度。从单线程切换到多线程的全部原因是因为单线程版本缺少传入信息,因为它正忙于尝试连接到数据库。鉴于生产者线程预计会以相当高的速率开始将信息转储到缓冲区中,并且假设缓冲区的大小有限,则消费者尽可能快地通过缓冲区工作同时保持稳定非常重要。
答案 0 :(得分:0)
如果不是数千个,你的MySQL在处理数百个连接时不应该有任何问题。
在您的每个消费者身上,您应该设置一个与您的消费者使用的连接池。如果您在单个线程(每个应用程序)中使用消息,则池只需要使用一个连接,但也可以使用并启动所有使用一个连接的并行线程。
使用连接池的原因是它将处理重新连接并为您保持活动状态。只要问它一个连接并让它保证它可以工作(它通过对数据库运行一个小查询来实现)。如果你暂时不使用连接并且终止它,那么池就会创建一个新的连接。