私のApache Tomcatサーバーには、ユーザーとドキュメントに関連するRDFトリプルと、そのようなエンティティ間の双方向リンクを処理するOpenRDF Sesameトリプルストアがあります。
http://local/id/doc/123456 myvocabulary:title "EU Economy"
http://local/id/doc/456789 myvocabulary:title "United States Economy"
http://local/id/user/JohnDoe myvocabulary:email "john@doe.com"
http://local/id/user/JohnDoe myvocabylary:hasWritten http://local/id/doc/123456
電子メール「john@doe.com」を持つユーザー John Doe が「EU 経済」の本を書いたこの 3 つの状態。
複数のクライアントで実行されている Java アプリケーションは、HTTPRespository を介してそのようなサーバーを使用して、そのようなトリプルを挿入/更新/削除していました。
問題は同時接続から発生します。Java クライアントがブック "456789" を削除し、他のクライアントが同じブックを "John Doe" に同時にリンクすると、"John Doe" がもう存在しないブックにリンクする状況が発生する可能性があります。
解決策を見つけるために、私は 2 つの取引を行いました。最初のものは(T1)です:
(a) ブック ID (つまり、「456789」) が存在するかどうかを確認します。
(b) 「はい」の場合、指定されたプロファイル (つまり「JohnDoe」) をこの本にリンクします。
(c) いいえの場合は、エラーを返します。
2 つ目は (T2) です。
- (d) ID (つまり "456789") で本を削除します。
問題は、シーケンスが (T1,a) (T2,d) (T1,b) (T1,c) の場合、再び一貫性の問題が発生することです。
私の質問は: ロック (MySQL FOR UPDATE や GET_LOCK など) を処理して、ゴマでそのようなトランザクションを適切に分離する方法は?