KSTORE底层学习
写在前面
由于历史原因,公司产品文档严重缺失,但公司产品规模较大,复杂度较高,文档缺失会导致学习代价较高,因此打算在学习的过程中,根据原有部分文档以及现有实现,倒推出部分文档,从而降低后续员工的学习代价。本文是产品KSTORE的底层部分学习文档,但为了便于理解,文档中的参考内容等,并不局限于底层。
软件设计说明书阅读(早期版本)
1. 定义、首字母缩写词和缩略语
- DP: Data Package,数据压缩包简称。KSTORE中数据以行列混合形式组织,例如每一万行数据打包然后按列进行压缩,压缩后形成的数据包即为一个DP。
- KL: Kstore Lob, KSTORE专用大对象简称,是KSTORE数据存储的基本结构。KL长度可大可小,一个KSTORE表由大量KL组成,每个压缩数据包,每个索引段以及KSTORE表的每个辅助结构均由单独的KL存储。
- GIC: Global Insert Cache, KSTORE的全局插入缓存段简称。
- PIC: Private Insert Cache, KSTORE的事务私有插入缓存的简称。
- DC: Delete Cache, KSTORE表的删除缓存的简称。
- DBP: Delete Bitmap, KSTORE表的删除位图存储的简称。
- DPN: Data Package Node, KSTORE表的基本索引简称。
- SKETCH: KSTORE表的增强辅助索引,现包括HASH和SUBSTR两种类型。
- SCN: System Commit Number, 系统提交序列,全局唯一,每个更新操作开始时加一,每个更新事务提交时加一。
- start_scn: 每个事务第一次更新操作时取得一个start_scn=SCN, SCN++,同时将start_scn的活动事务标记置位。
- snapshot_scn:每个事务开始时取得一个snapshot_scn,对于Read Commited事务,是语句开始时的系统SCN值,对于Serializable事务,是事务开始时的系统SCN值。
- commitscn: 更新事务提交时SCN++,获得commitscn=SCN。
2. 总体设计
2.1 功能描述及设计
KSTORE底层存储引擎主要包括以下几个部分:
- KSTORE表处理模块:实现对KSTORE底层数据的存储组织、查询、插入、删除等功能,对KSTORE所有其他模块进行融合。
- KSTORE下降算子处理模块:主要针对KSTORE查询处理中上层下降的查询算子进行优化、合并,以及进行针对性的索引选择。
- KSTORE辅助索引模块:在KSTORE中实现不同于B+树的辅助索引,帮助查询快速过滤数据,当前支持MAX/MIN、HASH、LIKE三种辅助索引。
- KL模块:KSTORE的专用大数据存储模块,区别于传统大数据模块,KSTORE对大部分数据的存取动作更为简明,因此需要一套更为简洁的大数据存取模块实现,提高整体效率。
- 压缩模块:实现数据的复合压缩功能,支持前端的规则压缩以及后端的通用压缩,其中规则压缩包括四种列内规则以及两种列间规则,后端支持LZOP和LZMA两种通用压缩算法。
2.2 设计概念和流程
2.2.1 存储结构设计
不同于神通数据库中的物理表,KSTORE表不再仅仅只负责数据的存储,同时还维护着数据表的各种模式信息、基本索引存储、辅助索引存储以及删除插入缓存等信息。这样将压缩、索引创建、选择、过滤和数据DML缓存等动作完全在存储引擎层封装,对上层更加透明,提高执行效率的同时也更易于与现有神童数据库架构兼容。 在KSTORE表的数据存储设计中底层主要可以分为两部分,首先是跟随数据表默认存在的数据以及基本索引存储部分,另外则是可由用户指定创建的辅助索引部分。 下图所示为KSTORE表的默认存储部分: