我们有一个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
我想有多个生产者运行,但不知道如何避免并发问题。
1条答案
按热度按时间pkwftd7m1#
我最终使用了这种方法:数据库记录的多线程处理的最佳实践—这种方法将一组记录分派给多个使用者来获取。它比使用队列处理单个记录快得多。