最近、Jeff は、読み取りに関連するデータベースのデッドロックに関する彼の問題について 投稿しました。Multiversion Concurrency Control (MVCC)は、この問題を解決すると主張しています。それは何ですか、どのデータベースがそれをサポートしていますか?
更新:これらはそれをサポートしています(他にはどれですか?)
- オラクル
- postgresql
最近、Jeff は、読み取りに関連するデータベースのデッドロックに関する彼の問題について 投稿しました。Multiversion Concurrency Control (MVCC)は、この問題を解決すると主張しています。それは何ですか、どのデータベースがそれをサポートしていますか?
更新:これらはそれをサポートしています(他にはどれですか?)
Oracle は非常に長い間 (少なくとも oracle 8.0 以降) 優れたマルチ バージョン管理システムを導入してきました。
以下が役立ちます。
私は可能な限り簡単な言葉で説明しようとしました...データベースのマルチバージョン化には多くのことがあります。
INSERT、UPDATE、および DELETE ステートメントを発行するときに MVCC がどのように機能するかを示すこの記事も同様です。
以下はMVCCの実装を持っています:
SQL Server 2005 (デフォルト以外、SET READ_COMMITTED_SNAPSHOT ON
)
Oracle (バージョン 8 以降)
MySQL 5 (InnoDB テーブルのみ)
PostgreSQL
火の鳥
Informix
Sybase と IBM DB2 メインフレーム/LUW には MVCC の実装がないことは確かです
XtremeData dbX は MVCC をサポートしています。
さらに、dbX は FPGA ハードウェアに実装された SQL プリミティブを利用できます。
Firebird はそれを行います。彼らはそれを MGA (Multi Generational Architecture) と呼んでいます。
元のバージョンをそのまま保持し、それを使用するセッションのみが表示できる新しいバージョンを追加します。コミットすると、古いバージョンが無効になり、新しいバージョンがすべてのユーザーに対して有効になります (ファイルはデータで山積みになり、定期的なクリーンアップが必要です)。 .
Oracle はデータ自体を上書きし、ロールバック セグメント/UNDO テーブルスペースを他のセッションとロールバックに使用します。
SAP HANA も MVCC を使用します。SAP HANA は完全なインメモリ コンピューティング システムであるため、select の MVCC コストは非常に低くなります... :)
MVCC の PostgreSQL ドキュメント ページへのリンクを次に示します。選択の引用(私の強調):
ロックではなく同時実行制御の MVCC モデルを使用する主な利点は、MVCC ではデータのクエリ (読み取り) のために取得されたロックがデータの書き込みのために取得されたロックと競合しないため、読み取りによって書き込みがブロックされることはなく、書き込みによって読み取りがブロックされることはありません。
これが、ジェフが行き詰まりに非常に困惑した理由です。読み取りによってそれらが発生することはありません。
InnoDB テーブルを使用する場合、MySQL はデフォルトで MVCC も使用します: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html
SQL Server 2005 以降ではオプションとして MVCC が提供されます。ただし、これはデフォルトではありません。メモリが機能する場合、MS はこれをスナップショット分離と呼んでいます。
MVCC は、テーブルにバージョン番号列を追加し、常に更新ではなく挿入を行うことで、手動で実装することもできます。
これのコストは、はるかに大きなデータベースであり、最新のレコードを見つけるためにそれぞれがサブクエリを必要とするため、選択が遅くなります。
これは、すべての変更を 100% 監査する必要があるシステムにとって優れたソリューションです。
McObject は 11/09 に、オプションの MVCC トランザクション マネージャーを eXtremeDB 組み込みデータベースに追加したことを発表しました。
http://www.mcobject.com/november9/2009
当初はインメモリ データベース システム (IMDS) として開発された eXtremeDB は、ハイブリッド (インメモリ/オンディスク) ストレージ、高可用性、64 ビット サポートなどを備えたエディションで利用できるようになりました。
McObject の共同創設者兼 CEO が RTC Magazine に書いたこの記事には、MVCC の図を使用した適切な説明と、eXtremeDB のいくつかのパフォーマンス数値があります。
http://www.rtcmagazine.com/articles/view/101612
複数の CPU コアで実行される多くのタスクを含むようにアプリケーションが拡張されるにつれて、MVCC がますます有益になることは明らかです。
DB2 バージョン 9.7 には、ライセンス版の postgress plus が含まれています。これは、この機能が (適切なモードで) この機能をサポートしていることを意味します。
Berkeley DBは MVCC もサポートしています。
また、MySQL でBDB ストレージ エンジンを使用すると、MySQL も MVCC をサポートします。
Berkeley DB は、非常に強力でカスタマイズ可能な、完全に ACID 準拠の DBMS です。インデックス作成、マスター/スレーブ レプリケーションのためのいくつかの異なる方法をサポートし、独自の動的 API を使用して純粋なキー値ストアとして使用したり、必要に応じて SQL でクエリを実行したりできます。一見の価値があります。
MVCC を採用した別のドキュメント指向の DBMS はCouchDBです。ここでの MVCC は、組み込みのピアツーピア レプリケーションにとっても大きな利点です。
http://vschart.com/list/multiversion-concurrency-control/から
Couchbase、OrientDB、CouchDB、PostgreSQL、Project Voldemort、BigTable、Percona Server、HyperGraphDB、Drizzle、Cloudant、IBM DB2、InterSystems Caché、InterBase