请问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 的话,建议业务垂直拆表。
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。