【发布时间】:2018-10-10 20:14:38
【问题描述】:
我们有一个 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
我想运行多个生产者,但不知道如何避免并发问题。
【问题讨论】:
-
如果您使用
AUTO_INCREMENT作为列选项,您将无法获得 ID 冲突 -
@RaymondNijland - 我们将
AUTO_INCREMENT用于id字段,这就是发送到SQS 的内容。我的问题是我们只有一个生产者,它只能如此快速地循环遍历 MySQL 记录。我们需要能够每秒向 SQS 发送更多 ID。 -
如果您提供带有一些示例数据和一些代码的表结构 (
SHOW CREATE TABLE table),您的问题可能更容易理解? -
@RaymondNijland - 更新
标签: mysql message-queue amazon-sqs producer-consumer