你好!两个问题一起回答!
“Part 1:TiKV - 持久化 课程中,老师说一张 table 对应一个列蔟” 课程中的这句话,我指的是 rocksDB 这个单机数据库,并不是 TiDB 数据库,所以请不要混淆。具体到 TiDB 数据库我们可以这样理解:
(1). 我将某张表(行列的那种关系型的),先变成 key - value 形式的键值对组成的数据对象形式,然后存入 TiKV 中,当存满 96MB 时候就形成了一个 region。
(2).所有的表存储 TiKV 中都是(1)中的过程,也就是说这些表在 TiKV 中就变成了一个一个的 region(由 key - value 组成的集合),这里要注意,所有表在这里实现了统一,也就是统一为 key - value 了。
(3)接下来,我们进入 TiKV,TiKV 里面实际是将这些 region 往自己内部的 rocksDB 中存的,这个 rocksDB 叫 rocksDB KV,里面有 3 个 column families,分别是 default cf,lock cf 和 write cf。这 3 个 column families 和表就没有什么关系了,其中,咱们说的新进来的一个一个的 region(由 key - value 组成的集合)指定放到 default cf 的,如果 key-value 的值都小于 255 字节,也会放到 write cf 的。另外,数据库运行中的锁信息也是以 key-value 的形式存在 lock cf 的,数据库运行中的事务提交信息(提交时间等)也是以 key-value 的形式存在 write cf 的。
(4)所以,总结下来,TiKV 中的 rocksDB KV 中的 3 个 column families 其实和哪张表没有关系!对应数据的性质,可以简单理解为:<1>所表的数据都会统一转化为 key - value,形成 region,存在 default cf 中;<2> 所有锁信息,会以 key - value 形式存在 lock cf 中;<3>所有提交信息,会以 key - value 形式存在 write cf 中。