首页 > 解决方案 > 生产者/消费者队列模式中更快的生产者

问题描述

我们有一个 MySQL 表,每天有大约 500 万条记录写入其中。

每条记录都需要一点时间来处理一些与之相关的元数据。所以我们有一个单一的“生产者”进程,它将每个记录 ID 发送到消息队列 (SQS)。

然后我们有 50 个“消费者”,它们拉下每个 ID 并执行必要的处理任务。

这种模式效果很好。但是,数据量仍在不断增长。我们的单一生产者无法再跟上插入表中的数据量。

我知道我们可以添加更多消费者来加快处理速度。但是,在不发生 ID 冲突的情况下加速生产者的好策略是什么?

更新

这是表结构:

id  int(10) AUTO_INCREMENT
name varchar(255)   
is_processed tinyint(1)
is_queued   tinyint(1)
created_at  timestamp
updated_at  timestamp
meta_data   text

我想让多个生产者运行,但不知道如何避免并发问题。

标签: mysqlmessage-queueamazon-sqsproducer-consumer

解决方案


我最终使用了这种方法:多线程处理数据库记录的最佳实践——这为多个消费者分派记录集以获取。它比使用队列处理单个记录要快得多。


推荐阅读