这更多是寻求建议/最佳实践。我们有一个拥有众多用户(> 200,000)的网站,我们需要向所有用户发送有关他们所在地区发生的事件的电子邮件。什么是错开添加工作的最佳方式?
注意事项:
发送电子邮件不是问题,问题是添加了作业。如果我们突然尝试一次添加那么多工作,我害怕性能受到打击。
答案 0 :(得分:1)
我希望您的要求就像向新闻组和订阅者发送新闻一样。
您是否已经拥有群组,是否可以实施。
这将有助于过滤并避免过滤整个200000用户。
发送基于群组的电子邮件将减少数据库负载我希望!!。
在db 活动和非活动状态下,用户可以在那里。
运行 cron作业是解决方案。但间隔是基于作业可能影响您的服务器的负载。 所以,如果 db设计和作业间隔是良好的性能将是betetr
答案 1 :(得分:0)
我假设您的队列是数据库中的一个表,您担心的是,向表中添加数千条记录会因为每次都重建索引而将其删除吗?
如果在单个进程中添加许多条目(例如,单个http请求或单个cronjob脚本),则可以在插入和提交完成之前启动事务。对于事务中的所有插入,索引只会更新一次。
如果这是一个更普遍的问题,您可能需要考虑使用消息队列而不是数据库表。
还是我完全离开了?
答案 2 :(得分:0)
每5分钟设置一次cron作业。检查是否有电子邮件要发送。如果有,并且没有设置为"正在进行中"然而,选择第一个并将其设置为正在进行中。选择ID为<的第一个用户n
并将其发送给他们。跟踪最后一个ID,然后重复,直到到达用户列表的末尾。