设计跟踪从SMTP服务器发送的电子邮件

时间:2016-02-11 12:13:34

标签: web-services email data-structures smtp

我正在尝试设计一项服务来向用户发送电子邮件。此服务与Amazon SES非常相似。

其中一项要求是跟踪此系统将发送的所有电子邮件。我很困惑如何设计这个解决方案,以便我可以维护发送电子邮件的父用户(发送电子邮件时已知)发送的电子邮件。

如果我开始在关系数据库中转储所有与电子邮件相关的数据,它将在一段时间内呈指数级增长,并会产生很多问题。同样地,如果我将这些东西存放在Cassandra中,它将以良好的速度增长并产生问题。

需要存储此信息: -

1)将来需要知道电子邮件是否已发送给特定用户以及何时发送。

2)如果反馈循环创建投诉邮件,我将需要将其映射回特定的电子邮件ID(将出现在投诉电子邮件中)和发送邮件的父用户(将在电子邮件发送时存储)发送)。

有人可以帮我指点,如何以实现此目的的方式存储或创建一些缓存。

1 个答案:

答案 0 :(得分:0)

它不可能以指数方式成长。"好像它会线性增长。无论如何,如果你需要能够查找谁向谁发送了什么,那么你别无选择,只能存储它。

您需要做的是估算每天发送的电子邮件数量,以及每封电子邮件需要保存的数据量。进行数学计算并确定您希望每天生成多少数据。那么至少你可以弄清楚你的数据库随着时间的推移会有多大。

您还需要考虑如何索引数据。好像你想要通过电子邮件ID索引,至少。您可能还希望按发件人进行索引,也可能希望按收件人进行索引。这些索引将创建额外的每个电子邮件数据存储要求。你必须通过分析确定多少东西。

很难确定每个电子邮件占用多少实际磁盘空间。如果消息很短,那么在关系数据库中,每千兆字节可能会收到超过一百万封电子邮件。如果压缩消息数据,或者应用其他利用消息中相似性的技术,您可能会比这更好。例如,如果您向一千个收件人发送完全相同的邮件,则可以存储邮件的单个副本,并在单个电子邮件记录中存储对该邮件的引用。

您可能还想考虑存储每封邮件需要多长时间。您是否需要永久存储所有内容,或者您​​是否可以定期删除超过一年(或其他相对较长时间)的所有邮件?