29

楽観的同時実行制御(OCC)とマルチバージョン同時実行制御(MVCC)の違いは何ですか?

これまでのところ、どちらも更新のバージョンチェックに基づいていることを私は知っています。

OCCでは、読み取りアクセスのロックを取得しないトランザクションについて読みましたが、バージョンがインクリメントされてバージョンチェックが失敗した場合に失敗する後の更新についてのみです。この場合、トランザクションはロールバックされます。

MVCCでは、基本的に同じですか?違いはどこですか?

4

3 に答える 3

25

これらは同じ意味で使用されることもあると思います。トランザクションに 1 つのオブジェクトのみが含まれる場合、それらは本質的に同じですが、MVCC は、複数のオブジェクトが含まれる場合に保証を提供する楽観的同時実行の拡張 (またはそのバージョン) です。A と B という 2 つのオブジェクトがあるとします。これらは、それらの間で何らかの不変条件を維持する必要があります。たとえば、これらは合計が定数である 2 つの数値です。ここで、トランザクション T1 が A から 10 を引いて B に加算し、同時に別のトランザクション T2 が 2 つの数値を読み取っています。A と B を別々に楽観的に更新したとしても (それらを CAS)、T2 は 2 つの数値の一貫性のないビューを取得する可能性があります (たとえば、変更前に A を読み取り、変更後に B を読み取る場合)。MVCC は、T2 が A と B の一貫したビューを読み取れるように、古い値を返す可能性があることを保証します。つまり、

要約すると、楽観的ロック (または楽観的同時実行制御) は、ロックなしの同期の一般原則です。MVCC は、複数のオブジェクトにまたがる分離されたトランザクションを可能にする楽観的な手法です。

于 2012-01-20T02:21:19.207 に答える
21

質問に直接答えるために、マルチバージョン同時実行制御 (MVCC) は同時実行制御方法であり、(通常)楽観的同時実行制御 (OCC) のカテゴリに属します

同時実行制御の主なアプローチは 2 つあります。

  • Pessimistic Concurrency Control : このアプローチは、競合する操作がより頻繁に発生することを前提としています (そのため、ペシミスティックと呼ばれます)。競合はよくあることなので、このアプローチではロックを使用して、競合する操作が実行されるのを防ぎます。ただし、その使用による大きなオーバーヘッドはないと仮定します。
  • Optimistic Concurrency Control : このアプローチは、競合する操作がまれであり、それほど頻繁に発生しないことを前提としています。この仮定の下では、ロックはパフォーマンスに重要で不要なオーバーヘッドを課します。このため、このアプローチでは通常、ロックを回避して操作の実行を試み、(各トランザクションのコミット時に) 操作中に別のトランザクションとの競合があったかどうかを確認します。競合があった場合、このアプローチでは、競合する操作があったトランザクションを中止します。

悲観的同時実行制御の広く知られているアルゴリズムの 1 つに2 フェーズ ロックがあります。

オプティミスティック同時実行制御の 2 つの広く知られているアルゴリズムは次のとおりです。

これら 2 つのアルゴリズムの主な違いは次のとおりです。タイムスタンプベースのアルゴリズムは、オブジェクトに最後にアクセスしたトランザクションを示す単一のタイムスタンプ (より正確には、読み取りと書き込みの操作の種類ごとに 1 つ) を各オブジェクトに割り当てます。そのため、各トランザクションは、オブジェクトにアクセスした最後のトランザクションと競合するかどうかを操作中にチェックします。マルチバージョン アプローチでは、各オブジェクトの複数のバージョンが維持され、それぞれがトランザクションに対応します。その結果、競合する可能性のあるトランザクションが、場合によっては中止する代わりに、新しいバージョンを書き込むことができるため、複数バージョンのアプローチは、最初のアプローチよりも中止を少なくすることができます。ただし、これは、すべてのバージョンに必要なより多くのストレージを犠牲にして実現されます。

厳密に言えば、MVCC は主にデータの保存方法、つまり各データ項目に複数の物理バージョンが存在する可能性があるという事実に関係しています。その結果、悲観的な方法 (ロックなど) と組み合わせることも理論的には可能ですが、そのマルチバージョンの性質は楽観的な方法と組み合わせるのが最適です。

于 2016-09-01T10:27:46.353 に答える