在轮询我的数据库时,我真的需要“InProgress”标志吗?

时间:2014-07-02 17:57:38

标签: java sql database multithreading

我实现了一个事件监听器,通过creationTime以升序查询要处理的新项目。
我处理多线程。

我目前的工作流程是:

  1. 查询包含" New"的一批项目(让我们说50)。旗。
  2. 循环浏览这些项目,并为每个项目更新其状态为" InProgress"。
  3. 对于仍然在循环中的每个项目,启动相应的进程,在一个线程中分离(在我的情况下使用Akka Actors)。
  4. 只要流程完全完成,请将项目标记更新为"已消费"。
  5. 我设置了3秒的轮询频率,这显然可能涉及在当前检索到的项目被完全处理之前(由于多线程)查询新项目,标记"已消费"集。
    只有查询是单线程的,否则会导致检索重复。

    我想知道第2步是否必不可少:用" InProgress"更新每个项目标志
    实际上,它会减慢整体速度。

    我考虑过跳过这一步但是为了确保期货查询不会检索当前正在处理的项目(让我们想象一个非常长的计算),我不会尽快开始下一个检索查询整批处理。
    基本上,我的查询步骤将等待工人完成他们当前的工作。 显然,如果工作类型在计算时间上相似,这将是有意义的。

    在处理多线程计算时轮询数据库的好习惯是什么?

0 个答案:

没有答案