2PL(ツーフェーズロック)では、厳密なモデルが厳密なモデルに比べてどのような利点がありますか?
I)厳密なモデルに勝る利点はありません。
II)厳密なモデルとは対照的に、それは飢餓が発生しないことを保証します。
III)厳密なモデルとは対照的に、デッドロックが発生しないことが保証されます。
IV)厳密なモデルとは対照的に、将来必要となるデータを予測する必要はありません。
私のメモによると、上記はすべて誤りです。私は少し混乱しています。誰かが私のためにこれがすべて間違っている理由を明確にすることができますか?
ツーフェーズロック(2PL)プロトコルとは何ですか?
A transaction is two-phase locked if:
before reading x, it sets a read lock on x
before writing x, it sets a write lock on x
it holds each lock until after it executes the corresponding operation
after its first unlock operation, it requests no new locks
さて、厳密な位相ロックとは何ですか?
ここで、トランザクションは、コミット/アボートするまで、すべての排他ロックを保持する必要があります。
しかし、厳密な2PLは何ですか?
厳密な2フェーズロックはさらに厳密です。ここでは、すべてのロックがコミット/中止されるまで保持されます。このプロトコルでは、トランザクションはコミットした順序でシリアル化できます。
はるかに深い:
厳密な2PL:
2PLと同じですが、トランザクションが正常にコミットまたは中止されるまで、すべての排他ロックを保持します。 –カスケードレスの回復可能性を保証します
厳密な2PL:
Strict 2PLと同じですが、トランザクションが正常にコミットまたは中止されるまで、すべてのロックを保持します。 –データアクセスパターンが事前にわからない動的な環境で使用されます。
デッドロックはありません。また、古いトランザクションによって保持されているアイテムを要求する若いトランザクションは中止され、同じタイムスタンプで再開され、飢餓が回避されます。
上記の図による明確な説明が、他のものに対する厳密さの概念と利点について明確にしたに違いないことを願っています。
ありがとう
見てください CLAからのこの講義ノート :
厳密な2フェーズロックには、厳密な2PLの利点があります。さらに、競合する2つのトランザクションの場合、コミット順序は直列化可能性の順序であるという特性があります。一部のシステムでは、ユーザーはこの動作を期待する場合があります。
これらの講義ノート 例があります(例のモデルは厳密です-厳密ではありません):
Xを読み取る長時間実行トランザクションT1が、xを書き込む短いトランザクションT2の前に順序付けられている、同じサイトで実行される2つのトランザクションについて考えてみます。 T2が最初に戻り、古いバージョンに基づいてT1が完了するずっと前にxの更新バージョンが表示されます。
厳密な2PLは、読み取り専用ロックが以前に解放される可能性がある厳密な場合とは対照的に、トランザクションの終了後にすべてのロックが解放されることを意味します。 expandingフェーズで発生するため、これはデッドロックや飢餓には影響しません(トランザクションは必要なロックを取得できません)。デッドロックでは、両方のプロセスが常に拡張フェーズにあります。
Strict:strict 2PLの通常の実装の詳細はわかりませんが、トランザクションが終了する前に読み取りロックが解放された場合は、知識が必要です(100%確実な予測のように)トランザクションの後半でロックは必要ありません。
厳密:すべての読み取りロックはトランザクションの終了時に解放され、トランザクションは読み取りロックを解放するか、後で保持するかを評価する必要はありません。トランザクションを読み込みます。
これら2つのモデルのどちらを使用するかは、状況によって異なります。最新のDBMSは、単純な厳密または厳密な2PLよりも複雑な同時実行処理を使用します。 2フェーズロックに関するウィキペディアの記事厳密な(SS2PL)モデルで判断すると、より広く使用されます:
SS2PL [厳密]は、ほとんどのデータベースシステムで選択されている同時実行制御プロトコルであり、1970年代の初期から利用されてきました。 [...]
一般的な形式の2PL、およびStrictnessと組み合わせた場合、つまりStrict 2PL(S2PL)は、実際に使用されることは知られていません。人気のあるSS2PLは、2PLやS2PLのように「フェーズ1の終わり」をマークする必要がないため、実装が簡単です。また、一般的な2PLとは異なり、SS2PLは、前述のように、有用な厳密性とコミットメント順序付けのプロパティを提供します。 [...]
SS2PL対S2PL:どちらも直列化可能性と厳密性を提供します。 S2PLはSS2PLのスーパークラスであるため、原則として、より多くの同時実行性を提供できます。ただし、通常、同時実行の利点は実際には見られず(両方にまったく同じロックが存在し、S2PLのロックリリースはほとんど早くありません)、トランザクションとは別に、S2PLでフェーズ1の終了メカニズムを処理するオーバーヘッドがあります。終わり、正当化されていません。また、SS2PLはコミットメント順序付けを提供しますが、S2PLは提供しません。これは、S2PLよりもSS2PLが優先されることを説明しています。 [...]
上記の例のトランザクションT2は、ロック解除ロック解除(A)の後にロック要求(ロックB)が実行されるため、2PLおよびS2PLに従わないため、プロトコルに違反します。
厳密な2フェーズロックは、厳密な2フェーズロックに似ていますが、2つの大きな違いがあります。
したがって、4番目のオプションが正しいオプションです。