今天看了openGauss的MOT中索引Key部分.MOT的索引使用的是MassTree索引,是字典树和b+树结合的一种数据结构,对高并发的情况有很好的支持.有关索引的具体实现,可参考MOT和MassTree的论文.MassTree以KV对的形式组织存储数据,所以Key对其是很重要的.今天主要讲一下MOT中有关Key的部分.
数据结构相关定义:Key.h
- Key是一个自定义类,主要有三个数据成员: uint8_t m_keyBuf[0].uint16_t m_keyLen.IkeyType m_type.分别表示数据的地址,长度,以及类型(内部键,代理主键,主键等)
- 函数:CpKey(const Key& key), SetKeyLen(uint16_t newLen),uint8_t* GetKeyBuf()等操作Key的函数
Key的生成
在插入新数据时,会为新数据创建索引,根据不同索引类型,有不同的生成Key的方法
- 代理主键:MOT中,代理键等价于RowId.通过TxnManager的GetSurrogateKey()方法获取,这个方法会根据m_surrogateCounter和connectionId生产一个唯一id作为其全局的key
- 如果主键FakePrimary,则将RowId设为代理主键,否则,调用主键索引的BuildKey(this, row, key)方法建立一个Key,主键列填充Key,其余部分为0x00.
网友评论