mysql - 生产者/消费者队列模式中更快的生产者
问题描述
我们有一个 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
我想让多个生产者运行,但不知道如何避免并发问题。
解决方案
我最终使用了这种方法:多线程处理数据库记录的最佳实践——这为多个消费者分派记录集以获取。它比使用队列处理单个记录要快得多。
推荐阅读
- php - 编码问题 char 看起来正确但不是
- django - Django 没有在 Heroku 上使用正确的 Postgres 模式
- sql - Clickhouse:在数组过滤之间映射
- linux - OCI runtime error for Docker on Debian Bullseye
- html - The website UI does not look fine in safari but looks perfect in chrome and firefox
- ios - 测试目标中没有这样的模块“RxBlocking”
- css - How can I have node-sass output files into a different folder?
- azure-devops - 无法在 Azure Devops 部署组(自托管)上运行 ASP.NET Core Web API
- vaadin - Vaadin: change CSS variables dynamically
- javascript - 如何仅在浏览器Javascript上完成另一个功能后才执行一个功能?