MVCCとは 特徴 具体的なケース readトランザクションとreadトランザクションの競合 readトランザクションとwriteトランザクションの競合 writeトランザクションとwriteトランザクションの競合
厳密さは不要なので、サクッと概要を理解したい人のための記事。
MVCCとは
DBに同時に書き込みをしようとしたときや、書き込みと読み取りが同時に行われようとしているときに
どのように解決するか、という手法の1つ。
多くのDBで採用されているロック機構と比較されることが多い。
- ロック機構:操作をする前に、順番待ちをして整合性を保つ
- MVCC:各々がコピーを取って同時に処理を行い、後で競合を解決する
gitで例えると、
- ロック機構:チーム開発でmainブランチ1本で運用するイメージ
- MVCC:チーム開発で複数のブランチを作って並列で作業するイメージ
特徴
書き込み処理と読み込み処理で、順番待ちが発生しにくい。
具体的なケース
readトランザクションとreadトランザクションの競合
これはロック機構もMVCCも特に問題になることはない。
readトランザクションとwriteトランザクションの競合
- write側は新しいバージョンを作成
- read側は元のバージョンを参照してデータ取得(writeの順番待ち不要)
writeトランザクションとwriteトランザクションの競合
同じデータを変更しようとしているとする。
- 各writeトランザクションが新しいバージョンのデータを作成し、後で競合を解消する
- タイムスタンプやトランザクションIDを元に判断する
- writeがもう一方のwriteを待つことがない