暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss列存储引擎的总体架构

openGauss小助手 2021-10-31
2247

列存引擎的存储基本单位是CU(Compression Unit,压缩单元),即表中一列的一部分数据组成的压缩数据块。行存引擎中是以行作为单位来管理,而当使用列存储时,整个表整体被按照不同列划分为若干个CU,实例如图9-25所示。


图9-25 CU划分方式

如图9-25所示,假设以6万行作为一个单位,则一个12万行、3列宽的表,则被划分为8个CU,每个CU对应一个列上的6万个列数据。图中有Col0、Col1、Col2、Col3四列,数据按照行切分了两个Row group(行组),每个Row group有固定的行数。针对每个Row group按照列做数据压缩,形成压缩单元CU(Compression unit)。每个Row group内部各个列的CU的行边界是完全对齐的。当然,大部分时候,CU在经过压缩后,因为数据特征与压缩率的不同,文件大小会完全不同,例如图9-26所示.

图9-26 压缩单元示意图

为了管理表对应的CU,与执行器层进行对接来提供各种功能,列存储引擎使用了CUDesc(压缩单元描述符)表来记录一个列存表中CU对应的元信息,如图9-27所示:

图9-27 列存引擎整体架构图

注: Cmn 表示第m列的cuid是n的压缩单元。

每个CU对应一个CU Desc的记录,在CU desc里记录了整个CU的事务时间戳信息、CU的大小、存储位置、magic校验码、min/max等信息。

与此同时,每张列存表还配有一张Delta表,Delta表自身为行存储表。当有少量的数据插入到一张列存表时,数据会被暂时放入Delta表,等到到达阈值或满足一定条件或操作时再行整合为CU文件。Delta表可以帮助我们避免单点数据操作带来的很重的CU操作与开销。

设计采用级别的多版本并发控制,删除通过引入Virtual Column Bitmap来标记删除。Bitmap是多版本的。

最后修改时间:2021-11-01 18:57:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论