我如何组织数据以向用户发送许多电子邮件?

时间:2011-05-30 17:10:40

标签: php mysql database email queue

这更多是寻求建议/最佳实践。我们有一个拥有众多用户(> 200,000)的网站,我们需要向所有用户发送有关他们所在地区发生的事件的电子邮件。什么是错开添加工作的最佳方式?

注意事项:

  • 我们将所有内容存储在MySQL数据库中
  • 电子邮件在基于队列的系统上发布,独立工作人员抓住任务并将其发送出去。
  • 我们收集用于分组的用户名,加入日期

发送电子邮件不是问题,问题是添加了作业。如果我们突然尝试一次添加那么多工作,我害怕性能受到打击。

3 个答案:

答案 0 :(得分:1)

我希望您的要求就像向新闻组和订阅者发送新闻一样。

您是否已经拥有群组,是否可以实施。

这将有助于过滤并避免过滤整个200000用户。

发送基于群组的电子邮件将减少数据库负载我希望!!。

在db 活动和非活动状态下,用户可以在那里。

运行 cron作业是解决方案。但间隔是基于作业可能影响您的服务器的负载。 所以,如果 db设计和作业间隔是良好的性能将是betetr

答案 1 :(得分:0)

我假设您的队列是数据库中的一个表,您担心的是,向表中添加数千条记录会因为每次都重建索引而将其删除吗?

如果在单个进程中添加许多条目(例如,单个http请求或单个cronjob脚本),则可以在插入和提交完成之前启动事务。对于事务中的所有插入,索引只会更新一次。

如果这是一个更普遍的问题,您可能需要考虑使用消息队列而不是数据库表。

还是我完全离开了?

答案 2 :(得分:0)

每5分钟设置一次cron作业。检查是否有电子邮件要发送。如果有,并且没有设置为"正在进行中"然而,选择第一个并将其设置为正在进行中。选择ID为<的第一个用户n并将其发送给他们。跟踪最后一个ID,然后重复,直到到达用户列表的末尾。