# MVCC（续）

![`smart`](MVCC01_aa_001_20220511.png)

------------------------------------------------------------------------------
TiKV 中的 RocksDB 实例中的三个列族实例按如下方式存储数据：

1. CF写入包含特定键的事务及其提交记录，以及相关的值变化和起始时间戳。例如，有一条事务1及其键值1和2的提交记录，起始时间戳为100。还有一条关于键4的记录，起始时间戳为80，表明它之前已提交。

2. 默认CF包含关键值1、2和4的记录，其中关键1和2的开始时间戳为100，表明它们是由同一个事务提交的。关键4的开始时间戳值与写CF中的值相同。

3. 在锁定CF中，由于事务1已经提交，事务1中键值1和2的锁已经被移除。但是，由于事务2尚未提交，事务2中键值1和4的锁仍然存在。

因此，RocksDB中的数据按照以下规则组织：

1. 对于默认CF，KEY由用户key和起始时间戳组成。对于写CF，KEY由用户key和提交时间戳组成。对于锁定CF，KEY仅仅是用户key。注意，用户key指的是业务key，而KEY指的是存储在RocksDB中的key。

2. 在所有的列族中，数据首先按用户键排序，然后在相同的用户键下，KEY值按降序排列，较新的数据（即具有较大的开始时间戳或提交时间戳的数据）排在较旧的数据（即具有较小的开始时间戳或提交时间戳的数据）之前。

这些信息可以帮助我们更好地理解TiKV中的MVCC（多版本并发控制）是如何工作的。