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

Php 如何组织数据以向用户发送多封电子邮件?,php,mysql,database,email,queue,Php,Mysql,Database,Email,Queue,这更多是为了寻求建议/最佳实践。我们有一个拥有大量用户的网站(>200000),我们需要向所有用户发送电子邮件,告知他们所在地区发生的事件。错开新增工作岗位的最佳方式是什么 注意事项: 我们将所有内容存储在MySQL数据库中 电子邮件在基于队列的系统中发送,由独立的工作人员抓取任务并发送出去 我们收集可用于分组的用户名、加入日期 发送电子邮件不是问题,问题在于增加工作。如果我们突然尝试一次添加那么多作业,我担心性能会受到影响。我假设您的队列是数据库中的一个表,您担心的是,向一个表中添加数千条

这更多是为了寻求建议/最佳实践。我们有一个拥有大量用户的网站(>200000),我们需要向所有用户发送电子邮件,告知他们所在地区发生的事件。错开新增工作岗位的最佳方式是什么

注意事项:

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

发送电子邮件不是问题,问题在于增加工作。如果我们突然尝试一次添加那么多作业,我担心性能会受到影响。

我假设您的队列是数据库中的一个表,您担心的是,向一个表中添加数千条记录会使它崩溃,因为每次都会重建索引

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

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


还是我完全不工作了?

每5分钟设置一个cron作业。让it部门检查是否有电子邮件要发送。如果有,但没有设置为“正在进行”,请选择第一个并将其设置为正在进行。选择第一个id为<
n
的用户并将其发送给他们。跟踪最后一个id,并重复此操作,直到到达用户列表的末尾。

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

您是否已经有,是否可以实施

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

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

在db中,可以显示用户的活动和非活动状态

运行cron作业是解决方案。但是间隔是基于作业可能影响服务器的负载。
因此,如果db设计和作业间隔都很好,那么性能将更好。cron作业可能是在间隔之后运行的解决方案,并且只不断添加一定数量的记录压缩站点。你能发布它的网址吗?也许,也会注册——谁知道呢?;)这几乎是我关心的问题。队列是数据库中的一个表,在处理作业时,它们将从表中删除。我担心一次在桌子上加那么多行会使它瘫痪。