MVCCはさまざまな方法で実装できます。唯一の要件は、何らかの古い行バージョンが利用可能であることです。
たとえば、SQL Serverは、サーバーを再起動するとリセットされる一時データベースに格納します。
Postgresは、行バージョンを隠し行としてBツリーに直接格納します。ツリーに隠しキー列を追加します。ツリーから読み込むと、論理的に見えるバージョンのみが公開されます。
RavenDBのVoronは、bツリーページを不変データとして管理します。書き込みはまったく新しいツリーを作成します。したがって、MVCCは、正しい不変ツリーからの読み込みとして実装されます。
データベースは、物理構造を長時間ロックすることはめったにありません。データベースクライアントがデータベース内部構造の進捗を停止できるようにすることはお勧めできません。内部構造は通常非常に簡単にロックされます。論理行ロックは別々に扱われます。
私が推測しなければならないのであれば、concurrency control on search structures
は物理的なスレッドセーフティを指します。これは通常、複数のバージョンを管理する必要がないため、MVCCには関係しません。短いメモリアクセスでは、通常のメモリ内ロックで十分です。
出典
2016-07-30 20:40:27
usr