【问题标题】:Java - Best practices to avoid contention on multi processes that poll the DBJava - 避免轮询数据库的多进程争用的最佳实践
【发布时间】:2015-05-26 21:10:42
【问题描述】:

我有一个每 60 秒加载一次作业的应用程序。 该作业轮询数据库中的一个表 (NoSQL),如果存在新行,它将在数据库中开始一些处理。

现在为了避免 SPOF,我加载了另一个应用程序实例,我会 希望避免对指示记录的争用。

避免轮询数据库的多进程之间争用的最佳做法是什么?
(有没有已知的/推荐的FW)

【问题讨论】:

  • 可能有多种方式。当您的进程拾取新行时,它可以记录这一事实,以便任何后续进程在尝试说它正在占用该行时都会被“警告”。例如:向某个表写入一条记录以表明它已占用该行,但只有在没有其他进程占用该行时才这样做(并且这两个步骤必须以您的 DBMS 保证是原子的方式完成)。如果原始记录有一些允许您更新的时间戳字段,那就足够了。

标签: java contention


【解决方案1】:

我不知道这样做的最佳实践,但如果我是你,我会创建一个名为“Listener”的主程序来检查表,如果存在新记录,该程序将创建另一个线程无论它必须做什么,当它完成时就会死去。线程将动态创建并在作业完成后终止,因此您可以通过这种方式避免 SPOF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2013-02-03
    • 2019-04-03
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多