【问题标题】:Faster Producer in Producer/Consumer Queue Pattern生产者/消费者队列模式中更快的生产者
【发布时间】: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


【解决方案1】:

我最终使用了这种方法:Best practices for multithreaded processing of database records - 这会分派记录集供多个消费者获取。它比使用队列处理单个记录要快得多。

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多