2012-02-02 127 views
1

我有几个相同的应用程序独立运行。每个从数据库读取一行(基于某些标准),执行一系列操作并最终更新该行。 因此我想确保一行开始被应用程序处理,不会被另一个处理。换句话说,我希望应用程序选择下一个可用的行。 我该如何执行此操作?H2数据库 - 并发连接策略

我尝试了使用“select ... for update”的不同策略,MVCC,不同类型的事务隔离,但暂时没有运气。

回答

1

一个常见的解决方案是使用一个 '州' 列中:

  • 0不处理
  • 1处理
  • 2处理

当处理的行,设置状态来1.处理完成后,将其设置为2.这将适用于所有数据库。

如果您想防止行处于“处理”状态(例如因为会话/连接已关闭),则可以添加一列'processing_session'并填充当前会话(函数SESSION_ID() )处理时。要查明会话是否仍然存在,请使用表INFORMATION_SCHEMA.SESSIONS