我的实现是给每个用户一个 UserID #(如果你还没有的话),然后我会有 2 个表(嗯,2 个主用户表)。第一个是 users_main 之类的东西,您可以在其中存储他们的基本信息、UID、姓名、电子邮件等,等等,我会将其中一个字段设为“通知”,这将是一个简单的布尔值 True False,True 表示他们这样做想要接收基于事件的通知,而 false 表示它们不接收。将其包含在主数据库中的原因是,如果他们确实想收到电子邮件,您将需要他们的信息,因此您已经缓存了他们的信息。
第二个表将是 users_periodic 或类似的。这实际上只是想要获取时事通讯的 UID 列表,以及您需要发送它的任何信息(例如,列可能是 UID、电子邮件、姓名)。然后,当您进行查询时,只需从该表中选择所有行。使您的数据库查找更容易一些。
理想情况下,我相信你会运行两个独立的服务器/数据库,因为当它运行时,它会吸收你的整个 I/O 直到它完成,如果服务器所做的几乎所有事情都是拉起用户统计数据,那就没问题了,并且只需制作一个 API 或程序,在用户注册时事通讯时将其发送到电子邮件信息服务器。
您也可以对此进行速率限制,它可能会变得更复杂一些,但我对此的基本实现是进行全面的 SQL 查询,从而为该程序分配 X MB 的 RAM,并且该程序只是循环并用它填满它的 RAM SQL 结果(这意味着它需要一种粗略的方法来估计查询将占用的 RAM 量,以及一种知道它获得多少行或下一个 UID 或其他东西的方法)。这里的问题是您不能一次只抓取所有这些值并从查询中检索一个值,因为这会阻塞数据库。你必须全部拿走,或者拿走你想要的并关闭查询。
就确保他们不会收到太多电子邮件而言,每天相对容易,只需创建一个今天发送的电子邮件列,让脚本在向他们发送电子邮件之前检查数字,然后让您的 fetch 将该值增加1 我们走了。然后只需制作另一个脚本,在午夜将这些值重置为 0。对于每周和每月,我不会打扰,无论如何这些都会受到每日费率的限制,并且您将不得不跟踪单个消息日期以确保您不会超过,这只是不值得.
至于阻止你的人,你或多或少无法控制它。您不应该被 SES 帐户阻止,除非您发送的垃圾邮件太多。如果你确实被屏蔽了,你真的无能为力,你已经把它列入了他们的禁止名单,你或多或少只需要处理它。你可以给他们寄好信,但我认为他们不会太在意,他们或多或少会做他们想做的事。
编辑:作为对您的编辑的回应,如果您确实拥有数十万用户,那么您不会想要使用预制的东西。如果您真的在谈论发送这么多电子邮件(对于这么多用户,您每天将发送至少十万封电子邮件),您将需要定制一些对您的设置和设置有效的东西相应地提高你的 SQL。我不知道有什么系统可以为您做到这一点,但是在一些更简单的脚本语言中进行基本设置不会太糟糕,尽管显然像 C 那样编译的东西会在您的系统上运行得更轻松。