我有多个源执行相同的mysql查询来获取和执行作业(源代码是不同的PHP脚本)。 我想得到与过去距离最远的工作,所以我使用这个查询:
SELECT * FROM jobs ORDER BY last_done ASC
现在我的问题是每个源都应该得到唯一的结果,这意味着如果一个源获得job1
这个作业应该得到last_done的更新,所以它再次位于表的底部,如果一个秒源执行该查询不应该获得job1
,而是应该获得job2
等等。
我遇到的问题是,如果我在选择之后单独更新,则有时两个来源几乎同时调用他们获得相同的工作。
我怎样才能最好地做到这一点,而不是两个来源一起查询得到同样的工作?
答案 0 :(得分:1)
1 - 设置交易隔离级别可串行化 2 - 在单个事务中执行选择和更新。
注意: SERIALIZABLE隔离级别可能过度,请查看https://en.wikipedia.org/wiki/Isolation_(database_systems)和http://msdn.microsoft.com/en-us/library/ms173763.aspx了解详情
答案 1 :(得分:0)
你应该使用交易。
一个实现可以
获取并将记录放在另一个表上job_in_progress
。
下次您可以选择不在job_in_progress
中的作业。
以可序列化的隔离级别执行此事务