TIDB源码学习笔记-row的编码格式
方案一 实现在util/rowcodec
会记录当前行的空置和非空值数量
如果总列数大于255,会用uint32存储column id,否则使用byte存储column id.
会将同一行非空列排布在前面,空值列排布在后面,分别按照column id进行排序。 每一个非空列column id对应一个value.
空值列的column id对应的value位置没有value重新赋值的操作。
会有一个notNullIdx来区分非空列和空列的界限。
最后转化为bytes的结构
- CodecVer: 1 byte
- flag: 1 byte : large 1 small 0
- numNotNullCols: 2 bytes
- numNullCols: 2 bytes
- colIDs32: uint32[] 转 byte[], 如果是small则为colIDs byte[]
- offsets32: uint32[] 转 byte[], 如果是small则为sffsets u16[] 转 byte[]
- data: byte[]
方案二
这套方案比较简单,申请row长度2倍的datum数组,前面用来存储数值,后面用来存储column id 一一对应。
发布于