表级数据 转 KV

请问TiKV 是如何将表级数据转化成kv形式的? 有木有相关文档

《TiDB in ACtion》 中对表数据 与 KV 的映射关系有相关描述,可以看下
https://book.tidb.io/session1/chapter3/tidb-kv-to-relation.html
不知是否需要代码方面的链接。

麻烦提供哈代码链接,谢谢

还有问题请教哈,不知道我理解是否有问题。。。

TiKV 底层是用RocksDB 作为存储引擎的,我们可能在不同时间段更新的一行数据中不同的列,最终由于LSM 的Compaction操作,让这一行的数据分布在LSM的不同Level上,如果我们需要读取这一行的数据,就需要遍历多层的sstable.

TiDB 拼 key 的代码在这里
https://github.com/pingcap/tidb/blob/master/tablecodec/tablecodec.go
一行数据是一个键值对,key value 分别是 RowID 对应这行的数据,TiKV 会加前缀以及之后拼上时间戳之后再写入 rocksdb

这是不是意味着,一条记录的所有列可能分布在LSM的不同层?

不是,一行记录就是一个键值对,值是包含了这行所有列的数据

假如有一个表有40多列, 在T0时刻 更新了一些列,这些数据最后落在了LSM的Ln层,在T1时刻,我更新了这表的一行的数据的某一列,更新的数据在L0层,按照您的意思,在L0层也会包含这一行数据的所有列? 还是仅仅包含这一行所更新列的数据呢?

如果包含所有列的话,这个代价是否有点大? 表级数据存储在LSM 中,并不像LevelDB 一样的kv式的更新

是包含所有列。
的确对于宽表的话代价是比较大,对于这种场景使用 TiDB 的话,建议业务垂直拆表。