2

我有一个带有联系表格的网站。用户提交姓名、电子邮件和消息,网站通过电子邮件将详细信息发送给我。

偶尔我的服务器的电子邮件系统出现问题,因此用户收到错误并且这些联系方式丢失。(不要说:获得更好的服务器,任何服务器都会时不时地出现电子邮件关闭,我们确实会收到很多提交)。

如果邮件发送函数返回错误代码,我想实现一个可以存储用户详细信息的系统。然后在每次进一步提交时,检查任何存储的提交并尝试将它们发送给我。

但是如何存储数据?

我正在使用python,所以我考虑使用搁置(单文件半数据库)。或者也许有人可以建议更好的数据格式?(我确实认为一个完整的数据库解决方案会有点矫枉过正。)

我看到的单个文件方法的问题是竞争条件:同时发送两封或多封失败的电子邮件会导致对数据文件进行两次编辑,从而导致数据损坏。

那么该怎么办?多文件解决方案,文件锁定还是其他?

4

3 回答 3

8

当我们在我们的环境中实现电子邮件发送功能时,我们以一种解耦的方式进行。因此,例如,用户将提交他们的数据,这些数据将存储在数据库中。然后,我们有一个单独的服务来运行、查询数据库并发送电子邮件。这样,如果有任何电子邮件服务器问题,该服务将稍后重试,数据和用户信心永远不会丢失。

于 2009-01-12T16:40:21.457 回答
4

尝试sqlite。它在标准库中具有默认的python 绑定,并且应该适用于有用的负载水平(或者我被告知)

于 2009-01-12T16:35:29.000 回答
2

按照建议,您可以为此使用 sqlite。主要问题是:“大量提交”是多少?我低于每秒几个,这将起作用。否则数据库文件将一直被锁定,您将遇到另一个问题。

但你也可以让它保持简单、愚蠢和简单:将文件写入磁盘。对于每个提交,一个文件都会写入一个临时目录(如果邮件服务器已关闭)。然后在读取目录并发送邮件的邮件服务器启动脚本中添加几行代码。没有数据库,没有锁定问题,如果您使用设置了配额的目录(或具有固定大小的 ramdisk),您应该不会遇到任何问题。

于 2009-01-12T16:57:17.507 回答