当我的网站周围发生事件时,我有一大堆电子邮件被加载到 MySQL 表中。随时可能有 1k-2k 等待发送。
我一直致力于对电子邮件进行批处理,并通过一名工作人员将它们发送出去。现在我希望在负载增加时向系统添加 X 个工作人员。
我的问题是关于不允许员工获取同一封电子邮件。我听说过以下选项。
- 使用 SELECT FOR UPDATE 锁定行
- 使用时间戳让工作人员知道它已被拍摄以及拍摄时间
- 有一位家长跟踪 child 并委派工作
我看到了其中每一个的值(value),但也看到了对数据库的大量读/写。那你会怎么做?
通过 PHP 和 MySQL 执行此操作
最佳答案
另一个快速而肮脏的选择,假设你有一个随机或结构化的主键,让 N 个工作人员中的每一个只接收 key%N==i
和 的邮件i
工作人员 ID。
您当然也可以采用其他足够随机的哈希值。不需要锁,不需要额外的协调,只是一个小问题,当一个 worker 死了而你没有注意到...
关于php - 电子邮件消息队列 - X worker 和停止重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363586/