H2データベースで行レベルのロックを使用しようとしています。 1回の接続でレコードレベルのロックを取得して解放する方法はありますか?H2データベースのロック解除
SELECT *
FROM "locks"
WHERE key = 'lock1'
FOR UPDATE;
SELECT *
FROM "locks"
WHERE key = 'lock2'
FOR UPDATE;
は、今私は、LOCK1をrelaseしたいのですが、LOCK2を保持し続けます。 「BEGIN TRANSACTION;」を挿入しようとしました。 lock2の前に、COMMITは両方のロックを解放します。
追加: サーバーデータベースにローカルキャッシュのようなH2を使用します。 目標は、プログラム間同期(java)を実装することです。 データは同期されません1:1、プログラムは何を保存するかを制御します。 FileChannelsはLinuxでは動作しませんが、ソケットは正常に動作しますが、私はそれらを醜い解決策にします。 タスク:
- サーバーとのデータベース同期。 1つのプログラムだけが同期を実行する必要があります。
- ログ書き込み;プログラムは2つのログファイルを使用し、1つから別のものに切り替えます。衝突を防ぐために、書き込み時間のためにファイルをロックする必要があります。
- 他にもあります。このとき
は、私は2つの方法
- たびに新しい接続を作成し、タスクの実行後にリリースを参照してください。接続確立には約600msかかる。
- テンポラリ・テーブルを使用する:CREATE AND DROP TEMPORARY TABLE tmp_lock1()。 2msかかります。問題:2つの接続があり、1番目のテンポラリテーブルを作成して突然終了すると(たとえばバグなど)、2番目のプログラムが動作するまでテーブルが存在します。