2016-07-30 24 views
3

私は現在dbms bookを読んでいますが、Mvcc(Multi version concurrency control)は高い並行読み込みと書き込みトランザクションに使用されていると理解しています。 しかし、「検索構造の並行性制御」の章では、Bツリーのさまざまなロックの概念(ロック結合、リンク手法など)について説明しています。MVCCとBツリーと並行性

DBMSのBツリーの内部ノードとリーフノードにMvccが適用されていませんか? B-Treeの並行性とMVCCの完璧な違いは何ですか?その場合、Mvvcはdbmsにどのように実装されていますか?

答えて

2

MVCCはさまざまな方法で実装できます。唯一の要件は、何らかの古い行バージョンが利用可能であることです。

たとえば、SQL Serverは、サーバーを再起動するとリセットされる一時データベースに格納します。

Postgresは、行バージョンを隠し行としてBツリーに直接格納します。ツリーに隠しキー列を追加します。ツリーから読み込むと、論理的に見えるバージョンのみが公開されます。

RavenDBのVoronは、bツリーページを不変データとして管理します。書き込みはまったく新しいツリーを作成します。したがって、MVCCは、正しい不変ツリーからの読み込みとして実装されます。

データベースは、物理構造を長時間ロックすることはめったにありません。データベースクライアントがデータベース内部構造の進捗を停止できるようにすることはお勧めできません。内部構造は通常非常に簡単にロックされます。論理行ロックは別々に扱われます。

私が推測しなければならないのであれば、concurrency control on search structuresは物理的なスレッドセーフティを指します。これは通常、複数のバージョンを管理する必要がないため、MVCCには関係しません。短いメモリアクセスでは、通常のメモリ内ロックで十分です。

関連する問題