RDBMSのデータの一貫性を保証するための仕組みとして、

MVCC(Oracle, MySQLのInnoDB, PostgreSQL)と
ロッキング・メカニズム(Microsoft SQL Server, DB2)の
2つがあることがわかったのですが、
一般的にどちらが優れているのでしょうか。

いろいろな書籍やWebの情報をあたってみたのですが、
この件については、ケースバイケースとお茶を濁している
ように見受けられます。本音のところをお聞きしたいと思います。

私はMVCCの方が優れていると思います。
ロッキング・メカニズムのように複雑なロックについて
理解する必要がありませんし、MS SQL Serverの2005では、
MVCCを実装しているようだからです。

では、ご意見お待ちしております。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:olo No.1

回答回数80ベストアンサー獲得回数1

ポイント40pt

一番下に書いてある説明が的を得ていて、

いくら考えてもコレだけで十分な理由に足るのではと思ってしまいますが。

id:witt

>MVCCの特徴は問い合わせ(読み込み)ロックの獲得と、

>書き込みロックの獲得が競合しないことです

>(読み込みは書き込みをブロックしませんし、

>書き込みも読み込みをブロックしません)。

なるほど。

逆にいうと、そうなっていないロッキング・メカニズムは

手抜きの実装ということになり、そのわりには、

MS SQL Server も DB2 も支持されているのが

不思議に思ったのです。

2006/02/19 22:08:35
id:olo No.2

回答回数80ベストアンサー獲得回数1

読み書きがお互いをブロックしないと

運用設計の面でも、可用性は高いですよね。

稼動サポート時間が延びるとか、

レスポンスがあがるとか。


技術的に複雑、高度なのはどちらかといわれると確かに詰まります。

可用性が高い、設計しやすい

→MVCCが優れている

のは確かだとは思いますが。


手抜きというわけではないですが、

MS SQL Server 2000 も古いと思うので、

当時は単に実装できず、ズルズル今まで

来ているだけという気がしますが。

id:witt

単純に、MVCCの方がロッキング・メカニズムよりも

優れていると考えて良さそうですね。

気になるのは、Microsoft SQL Server 2005で

データの一貫性を保障する場合、どちらも使えるので

どちらを使えばよいかということです。

MVCCは優れているとはいえ、実績がないので。

2006/02/20 00:37:52
id:fuktak No.3

回答回数29ベストアンサー獲得回数0

ポイント20pt

私もMVCCの方が使い勝手はいいと思いますが、MVCCの問題点も把握しておくべきでしょう。


上に書いたPDFの10ページ目に「組版数が増えると不要なアクセスがあるため、性能が低下する。」とあります。


また私的な見解ですが、組版を複数持つということは外部記憶を余分に必要とするということは忘れてはいけないと思います。外部記憶が潤沢に使えるようになったという背景のもと出てきた考え方ではないでしょうか?

id:witt

>「組版数が増えると不要なアクセスがあるため、性能が低下する。」

なぜそうなるかというのが、いまいちピンとこないのですが、

まぁ、そういう欠点もあると認識したいと思います。

ご意見ありがとうございました。

2006/02/23 12:42:07

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 実践 Rails --4章 データベース **MVCC PostgreSQLの同時処理のサポートは、MySQLのものよりもずっと成熟している。PostgreSQLは、行レベルのロックよりもさらに高度なMVCC(Multiversion Concurrency Control)を
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません