エンジニアを目指す初学者に向けて、わかりやすく解説したブログです。

MVCC(多版型同時実行制御)とは?をわかりやすく説明

厳密さは不要なので、サクッと概要を理解したい人のための記事。

MVCCとは

DBに同時に書き込みをしようとしたときや、書き込みと読み取りが同時に行われようとしているときに
どのように解決するか、という手法の1つ。

多くのDBで採用されているロック機構と比較されることが多い。

  • ロック機構:操作をする前に、順番待ちをして整合性を保つ
  • MVCC:各々がコピーを取って同時に処理を行い、後で競合を解決する

gitで例えると、

  • ロック機構:チーム開発でmainブランチ1本で運用するイメージ
  • MVCC:チーム開発で複数のブランチを作って並列で作業するイメージ

特徴

書き込み処理と読み込み処理で、順番待ちが発生しにくい。

具体的なケース

readトランザクションとreadトランザクションの競合

これはロック機構もMVCCも特に問題になることはない。

readトランザクションとwriteトランザクションの競合

  • write側は新しいバージョンを作成
  • read側は元のバージョンを参照してデータ取得(writeの順番待ち不要)

writeトランザクションとwriteトランザクションの競合

同じデータを変更しようとしているとする。

  • 各writeトランザクションが新しいバージョンのデータを作成し、後で競合を解消する
    • タイムスタンプやトランザクションIDを元に判断する
  • writeがもう一方のwriteを待つことがない