我有一个数据库,其列为:
| from_email | to_email | subject | body | processed(Y/N) |
现在我想用Java实现一个系统,该系统将访问此数据库而不进行处理,发送邮件(我使用fakeSMTP进行测试)并将其设置为已处理。
它工作得很好,虽然我还没有添加任何线程。
但问题是如何加快可能在多台服务器上部署的程序,在这种情况下,如何才能确保没有邮件被发送两次?
怎样才能更快?
答案 0 :(得分:1)
以下应该是解决您问题的方法:
每个服务器都应具有唯一ID
将server_id的默认值null
添加到mails
表
当服务器打算发送邮件时,请运行查询,例如:
update mails
set server_id = <your server_id>
where (server_id is null) and (<your other criteria>)
处理完update
后,选择行,如果server_id
具有预期值(没有发生并发问题),则处理它
如果记录server_id
不是null
,则其处理已经开始。如果其server_id
不为空且其processed
为Y
,则表示已对其进行处理。