我们有一个MySQL表,每天写入大约500万条记录 .
每条记录都需要一些时间来处理与之关联的一些元数据 . 所以我们有一个SINGLE“ 生产环境 者”进程,它将每个记录ID发送到一个消息队列(SQS) .
然后我们有50个“消费者”,它们下拉每个ID并执行必要的处理任务 .
这种模式效果很好 . 但是,数据量继续增长 . 我们的单个 生产环境 者无法再跟上插入表中的数据量 .
我知道我们可以添加更多消费者来加快处理速度 . 但是,在没有遇到ID冲突的情况下加速 生产环境 者的好策略是什么?
UPDATE
这是表结构:
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 回答
我最终使用了这种方法:Best practices for multithreaded processing of database records - 这会调度多个消费者的记录集 . 它比使用队列处理单个记录要快得多 .