2012-02-02 16 views
1

私はいくつかの同一のアプリケーションを独立して実行しています。それぞれは、(いくつかの基準に基づいて)データベースから行を読み取り、一連の操作を実行し、最後にその行を更新します。 したがって、ある行がアプリケーションによって処理され始め、別の行によって処理されないようにしたいと考えています。つまり、次の利用可能な行を選択するアプリケーションが必要です。 これはどのように実装できますか?H2データベース - 同時接続戦略

私は、「select ... for update」、MVCC、さまざまなタイプのトランザクション分離を使用していますが、幸運なことはありません。

答えて

1

一般的な解決策は、 '状態' 欄を使用することである。

  • 1処理
  • 2を処理していない行を処理するときに状態を設定

を処理しました1.処理されたら、2に設定します。これはすべてのデータベースで機能します。

行が「処理中」状態(例えば、セッション/接続が閉じられているため)で止まってしまわないようにするには、「processing_session」列を追加して現在のセッション(関数SESSION_ID() )処理します。セッションがまだ生存しているかどうかを調べるには、テーブルINFORMATION_SCHEMA.SESSIONSを使用します。