高性能,对于常见的点查,OceanBase 数据库提供了多级 cache 加速来保证极低的响应延时,而对于范
围扫描,存储引擎能够利用数据编码特征支持查询过滤条件的计算下压,并提供原生的向量化支持。
高可靠,除了全链路的数据检验之外,利用原生分布式的优势,OceanBase 数据库还会在全局合并时通过
多副本比对以及主表和索引表比对的校验来保证用户数据正确性,同时提供后台线程定期扫描规避静默错
误。
存储引擎的功能存储引擎的功能
从功能模块划分上,OceanBase 数据库存储引擎可以大致分为以下几个部分。
数据存储数据存储
数据组织
和其他 LSM-tree 数据库一样,OceanBase 数据库也将数据分为内存增量数据(MemTable)和存储静态
数据(SSTable)两个层次,其中 SSTable 是只读的,一旦生成就不再被修改,存储于磁盘;MEMTable
支持读写,存储于内存。数据库 DML 操作插入、更新、删除等首先写入 MEMTable,等到 MEMTable 达
到一定大小时转储到磁盘成为 SSTable。
另外在 OceanBase 数据库内,SSTable 会继续细分为 Mini SSTable、Minor SSTable、Major SSTable 三
类,MEMTable 转储后形成的我们称为 Mini SSTable,多个 Mini SSTable 会定期 compact 成为 Minor
SSTable,而当 OceanBase 数据库特有的每日合并开始后,每个分区所有的 Mini SSTable 和 Minor
SSTable 会整体合并为 Major SSTable。
存储结构
在 OceanBase 数据库中, 每个分区的基本存储单元是一个个的 SSTable,而所有存储的基本粒度是宏块,
数据库启动时,会将整个数据文件按照 2MB 定长大小切分为一个个宏块,每个 SSTable 实质就是多个宏
块的集合。
每个宏块内部又会继续切分为多个微块,微块的概念和传统数据库的 page/block 概念比较类似, 但是借
助 LSM-Tree 的特性,OceanBase 数据库的微块是做过压缩变长的,微块的压缩前大小可以通过建表的时
候指定 block_size 来确定。
而微块根据用户指定存储格式可以分别以 encoding 格式或者 flat 格式存储,encoding 格式的微块, 内部
数据会以行列混合模式存储;对于 flat 格式的微块,所有数据行则是平铺存储。
压缩编码
OceanBase 数据库对于微块内的数据会根据用户表指定的模式分别进行编码和压缩。当用户表打开
encoding 时, 每个微块内的数据会按照列维度分别进行列内的编码,编码规则包括字典/游程/常量/差值
等,每一列压缩结束后,还会进一步对多列进行列间等值/子串等规则编码。编码不仅能帮助用户对数据
进行大幅压缩,同时提炼的列内特征信息还能进一步加速后续的查询速度。
在编码压缩之后,OceanBase 数据库还支持进一步对微块数据使用用户指定的通用压缩算法进行无损压
缩,进一步提升数据压缩率。
转储合并转储合并
转储
OceanBase 数据库中的转储即 Minor Compaction 概念可以理解和其他 LSM-tree 架构数据库的
Compaction 概念类似,主要负责 MEMTable 刷盘转成 SSTable 以及多个 SSTable 之间的 Compaction
策略选择以及动作。OceanBase 数据库中采用的是 leveled 结合 size tired 的 Compaction 策略,大致可
以分为三层,其中 L1 和 L2 就是固定的 leveled 层次,L0 层是 size tired,L0 内部还会继续根据写放大系
数以及 SSTable 个数进行内部 Compaction 动作。
合并
评论