我们有一个MySQL表,每天写入大约500万条记录。
每条记录都需要一些时间来处理与之相关的一些元数据。所以我们有一个SINGLE“生产者”进程,它将每个记录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
我想让多个生产者运行,但不知道如何避免并发问题。
答案 0 :(得分:0)
我最终使用了这种方法:Best practices for multithreaded processing of database records - 这会调度多个消费者的记录集。它比使用队列处理单个记录要快得多。