# MVCC - 続き

![`smart`](MVCC01_aa_001_20220511.png)

------------------------------------------------------------------------------
TiKVのRocksDBインスタンス内の3つのカラムファミリーインスタンスは、以下のようにデータを格納します：

1. Write CF は、特定のキーに関連するトランザクションとそのコミットのレコード、および関連する値の変更と開始タイムスタンプを含んでいます。 例えば、キー値1と2に関するトランザクション1とそのコミットのレコードが、開始タイムスタンプ100であることがあります。 また、開始タイムスタンプ80であるキー4のレコードもあり、以前に提出されたことを示しています。

2. Default CFには、キー値1、2、4のレコードが含まれており、キー1と2はスタートタイムスタンプが100であることから、同じトランザクションによって提出されたものと判断できます。キー4は、Write CFと同じスタートタイムスタンプの値を持っています。

3. Lock CF では、トランザクション1がコミットされているため、トランザクション1のキー値1と2のロックが解除されています。しかし、トランザクション2がまだコミットされていないため、トランザクション2のキー値1と4のロックはまだ存在します。

それゆえ、RocksDB内のデータは以下のルールに従って整理されています：

1. Default CFのKEYは、ユーザーキーと開始タイムスタンプから構成されます。書き込みCFのKEYは、ユーザーキーとコミットタイムスタンプから構成されます。Lock CFのKEYは、単純にユーザーキーです。ユーザーキーはビジネスキーを指し、KEYはRocksDBに格納されているキーを指していることに注意します。

2. すべてのカラムファミリーでは、まずユーザーキーでデータがソートされ、同じユーザーキー内では、KEY値が降順でソートされ、新しいデータ（すなわち、より大きな開始タイムスタンプまたはコミットタイムスタンプを持つデータ）が古いデータ（すなわち、より小さな開始タイムスタンプまたはコミットタイムスタンプを持つデータ）よりも優先されます。

この情報を使えば、TiKV での MVCC（マルチバージョン並行制御）がどのように機能するかをより理解することができます。