【发布时间】:2015-05-26 21:10:42
【问题描述】:
我有一个每 60 秒加载一次作业的应用程序。 该作业轮询数据库中的一个表 (NoSQL),如果存在新行,它将在数据库中开始一些处理。
现在为了避免 SPOF,我加载了另一个应用程序实例,我会 希望避免对指示记录的争用。
避免轮询数据库的多进程之间争用的最佳做法是什么?
(有没有已知的/推荐的FW)
【问题讨论】:
-
可能有多种方式。当您的进程拾取新行时,它可以记录这一事实,以便任何后续进程在尝试说它正在占用该行时都会被“警告”。例如:向某个表写入一条记录以表明它已占用该行,但只有在没有其他进程占用该行时才这样做(并且这两个步骤必须以您的 DBMS 保证是原子的方式完成)。如果原始记录有一些允许您更新的时间戳字段,那就足够了。
标签: java contention