4

私は現在dbmsの本を読んでいます.Mvcc(Multi version concurrency control)が同時読み取りおよび書き込みトランザクションに使用されていることを理解しています。ただし、「検索構造の同時実行制御」の章では、B ツリーのさまざまなロックの概念 (ロック結合、リンク手法など) について言及しています。

Mvcc は B-Tree の内部および dbms のリーフ ノードに適用されませんか? Bツリーの同時実行性とMVCCは完全に異なるものですか?そうであれば、Mvvcはdbmsにどのように実装されていますか?

4

2 に答える 2

3

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

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

Postgres は、行バージョンを隠し行として直接 b ツリーに保存します。非表示のキー列をツリーに追加します。ツリーから読み取ると、論理的に表示されるべきバージョンのみが公開されます。

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

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

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

于 2016-07-30T20:40:27.587 に答える