mysql - 生产者消费者设置: How to handle Database Connections?

标签 mysql database producer-consumer

我正在构建我的第一个单生产者/单消费者应用程序,其中消费者从队列中取出项目并将它们存储在 MySQL 数据库中。

以前,当它是单线程应用程序时,我会打开到数据库的连接,发送查询,关闭连接,并在每次新信息进入时重复。

通过生产者-消费者设置,处理数据库连接的更好方法是什么?我应该在启动消费者循环之前打开它一次吗(我看不出这有什么问题,但我确信你们中的一个好人会指出它,如果有的话)?或者我应该在循环的每次迭代中打开和关闭数据库连接(似乎浪费时间和资源)?

该软件在大约 30 台小型 Linux 计算机上运行,​​所有计算机都与同一个数据库通信。我认为 30 个同时连接不是问题,但我很想听听您的想法。

抱歉,如果这已被涵盖,我在任何地方都找不到它。如果有的话,一个链接就太好了。谢谢!

为了清晰起见进行编辑 我这里主要关注的是消费者线程的速度。从单线程切换到多线程的全部原因是单线程版本缺少传入信息,因为它正忙于尝试连接到数据库。鉴于生产者线程预计会以相当高的速率开始将信息转储到缓冲区中,并且缓冲区的大小受到限制,因此消费者在保持稳定的同时尽快处理缓冲区非常重要。

最佳答案

您的 MySQL 在处理数百个甚至数千个连接时应该不会有任何问题。

在每个消费者上,您应该设置一个连接池,使用来自您的消费者的连接池。如果您在单个线程(每个应用程序)中使用消息,则池只需要使用一个连接,但也可以使用和启动全部使用一个连接的并行线程。

使用连接池的原因是它会为您处理重新连接并保持事件状态。只需请求它建立一个连接并让它 promise 它将工作(它通过对数据库运行一个小的查询来实现这一点)。如果您有一段时间不使用连接并且连接被终止,池将只创建一个新连接。

关于mysql - 生产者消费者设置: How to handle Database Connections?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642507/

相关文章:

mysql - 使用 MySQL,我尝试在数据库中创建一个表,然后插入,但收到 'syntax' 错误

json - Grails 在第二个数据库上运行查询 postgresql 以生成原始 JSON

java - 存储来自 URL 的原始 HTML 内容,然后从内存中获取 InputStream(不使用连接)

c# - FIFO 订单中的 TPL 生产者消费者#

php - 在数据库中找不到记录

python - MySQL 使用列表推导式插入

php - 比较两个结果并显示结果 PHP

MySQL 复制 - 如何清除从站的主站状态

database - 使用 Excel 作为前端同时访问数据库 - 可行吗?

java - RabbitMQ:快速生产者和慢消费者