14.3. ロックのタイプ


14.3.1. 楽観的ロックについて

楽観的ロックは、ロックの取得をトランザクションの準備時間まで延期することで複数のトランザクションが同時に終了するようにします。
楽観的モードは、複数のトランザクションが競合せずに終了するようにします。トランザクションは、他のトランザクションロックがクリアされるまで待機しなくてもコミットできるため、同時に実行されている複数のトランザクション間でほとんど競合が発生しない場合に適しています。writeSkewCheck が有効になっている場合、トランザクションが終了する前に、競合する変更が 1 つ以上データに加えられると、楽観的ロックモードのトランザクションはロールバックします。

14.3.2. 悲観的ロックについて

悲観的ロック (Pessimistic locking) は一括ロック (Eager locking) とも呼ばれます。
悲観的ロックは、クラスター全体のロックを各書き込み操作に適用することにより、複数のトランザクションでキーの値が変更されないようにします。ロックは、コミットまたはロールバックによってトランザクションが完了したときにのみ開放されます。
悲観的モードはキーで競合が発生し、効率が悪くなったり、予期されないロールバック操作が発生する場合に使用されます。

14.3.3. 悲観的ロックのタイプ

Red Hat JBoss Data Grid には、明示的な悲観的ロックと暗黙的な悲観的ロックが含まれています。
  • 明示的な楽観的ロックは、JBoss Data Grid Lock API を使用してトランザクションの期間にキャッシュユーザーがキャッシュキーを明示的にロックできるようにします。ロック呼び出しは、クラスターの全ノードにおいて、指定されたキャッシュキー上でロックの取得を試みます。ロックはすべてコミットまたはロールバックフェーズ中に開放されます。
  • 暗黙的な悲観的ロックは、キャッシュキーが変更操作のためアクセスされる時にキャッシュキーがバックグラウンドでロックされるようにします。暗黙的な悲観的ロックを使用すると、各変更操作に対してキャッシュキーが確実にローカルでロックされるよう JBoss Data Grid がチェックします。ロックされていないキャッシュキーが見つかると、JBoss Data Grid はロックされていないキャッシュキーのロックを取得するため、クラスターワイドのロックを要求します。

14.3.4. 明示的な悲観的ロックの例

以下は、キャッシュノードの 1 つで実行されるトランザクションの明示的な悲観的ロックの例になります。

手順14.3 明示的な悲観的ロックによるトランザクション

tx.begin()
cache.lock(K)           
cache.put(K,V5)         
tx.commit()
  1. cache.lock(K) が実行されると、K でクラスター全体のロックが取得されます。
  2. cache.put(K,V5) が実行されると、取得の成功が保証されます。
  3. tx.commit() が実行されると、この処理のために保持されたロックが開放されます。

14.3.5. 暗黙的な悲観的ロックの例

以下は、キャッシュノードの 1 つで実行されるトランザクションを使用する暗黙的な悲観的ロックの例になります。

手順14.4 暗黙的な悲観的ロックによるトランザクション

tx.begin()
cache.put(K,V)
cache.put(K2,V2)
cache.put(K,V5)
tx.commit()
  1. cache.put(K,V) が実行されると、K でクラスター全体のロックが取得されます。
  2. cache.put(K2,V2) が実行されると、K2 でクラスター全体のロックが取得されます。
  3. cache.put(K,V5) が実行されると、 K のクラスター全体のロックは以前取得されたため、ロックの取得は実行できませんが、put 操作は引き続き実行されます。
  4. tx.commit() が実行されると、このトランザクションのために保持されたすべてのロックが開放されます。

14.3.6. ロックモードの設定 (リモートクライアントサーバーモード)

Red Hat JBoss Data Grid のリモートクライアントサーバーモードでロックモードを設定するには、以下のように transaction 要素を使用します。
<transaction locking="{OPTIMISTIC/PESSIMISTIC}" />

14.3.7. ロックモードの設定 (ライブラリーモード)

Red Hat JBoss Data Grid のライブラリーモードでは、ロックモードが以下のように transaction 要素内で設定されます。
<transaction transactionManagerLookupClass="{TransactionManagerLookupClass}"
	     transactionMode="{TRANSACTIONAL,NON_TRANSACTIONAL}"
	     lockingMode="{OPTIMISTIC,PESSIMISTIC}"
	     useSynchronization="true">
</transaction>
トランザクションキャッシュに使用されるロックモードを設定するには、 lockingMode 値を OPTIMISTIC または PESSIMISTIC に設定します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.