高并发写入实践 SQL到KV映射 分布式融合数据库HTAP对外兼容 MySQL 协议和 SQL 语法,存储的数据包括以下两种: 表数据:表中每一行的数据(聚簇索引也是一种特殊的表数据)。 索引数据:除聚簇索引以外的其他索引数据。 术语解释 TableID:系统为每个表分配的一个 ID,目的是保证同一个表数据放在一起,方便全表扫描、范围查询等查找任务。 RowID:表内标识一行记录的唯一 ID。当表有单列整型主键时,会直接使用该主键值来作为 RowID;当表没有主键或表主键是非聚簇索引时,系统会自动分配一个隐式 RowID。 IndexID: 与 TableID 类似,分布式融合数据库HTAP会为表中每个索引分配了一个索引 ID。 indexedColumnsValue:由索引列值组成的字符串。 表数据与 KV 映射关系 数据表中的每行数据,都会映射成一个 (Key, Value) 键值对,映射规则存在以下两种情况: 表没有主键,或表有单列整型主键或其他非聚簇索引主键(含联合主键、非整型单列主键)。 shell Key: t{TableID}r{RowID} Value: [col1, col2, col3, col4, ...] 当表有单列整型主键时,会直接使用该主键值来作为 RowID。 聚簇索引主键。 shell Key: t{TableID}i{IndexID}indexedColumnsValue Value: [col1, col2, col3, col4, ...] 索引数据与 KV 映射关系 分布式融合数据库HTAP支持非聚簇索引型主键和二级索引(包括唯一索引和非唯一索引)。按照索引是否唯一,有如下两种情况,存储规则如下: 表的唯一索引或非聚簇索引型主键,Key 存储的是索引信息,而 Value 则存储上述行数据中的 RowID。用户可以根据索引查询到表数据 RowID,并回表去查询对应的行记录。 shell Key: t{TableID}i{IndexID}indexedColumnsValue Value: RowID 表的非唯一索引映射规则如下。由于索引非唯一,一个索引值可能对应多行数据,因此 Key 加上了 RowID 以保证 Key 的唯一。 shell Key: t{TableID}i{IndexID}indexedColumnsValue{RowID} Value: null