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

GaussDB不同存储引擎架构下的压缩技术特点

Gauss松鼠会 2025-02-27
33

GaussDB不同存储引擎架构下的压缩技术特点

通过之前的讨论,我们对数据库压缩解决方案的方向有了初步的认识。那么,数据库压缩方式有哪些实现方式呢?下面将摘取几个技术要点进行分析,并结合GaussDB存储内核原理列举几个优势用例。

在当前主流数据库系统中,存储引擎的组织方式多样,包括堆组织表和索引组织表,它们基于不同的存储原理,如B-树结构、LSM-Tree结构,以及追加更新和原地更新等关键技术,构成了存储引擎架构的核心。

这些技术究竟是如何与压缩技术相结合的呢?

对于堆组织表,数据库以页为单位(如8KB)分配存储空间,并按照数据写入顺序将行存储在页内。一个表空间内可以关联多个页面,使得整体表空间大小保持稳定;索引结构,通常采用B-树或B+树,用于关联堆表中的每行数据,不仅存储索引键,还存储行指针,使得数据长度相对较小。堆组织表和普通索引结构,如下图2所示。

在这里插入图片描述

堆组织表和普通索引结构

相比之下,索引组织表采用索引排序的方式存储,如图3所示,树结构的叶子节点不仅存放索引键,还存储主键,使得数据长度相对较长,对查询更为友好。但在大量数据插入时,需要寻址且产生大量随机写,可能导致数据写入过程缓慢。
在这里插入图片描述

索引组织表的结构

而LSM-Tree结构是由核心的memtable和SSTFile组成的多层架构,对业务数据导入非常高效。数据的增、删、改操作,首先以追加的方式更新到memtable,随后通过Flush和Compaction操作进行SSTFile的归并。
在这里插入图片描述

LSM-Tree结构及合并过程

这一过程中,如图4所示,涉及不同层级SSTFile的归并排序,导致大量的I/O操作和CPU计算。特别是在大量更新和删除操作后,Compaction操作会导致存储空间膨胀,以及I/O和CPU资源的波动性消耗。这是由于Compaction操作需要先申请新的SSTFile,完成数据归并后再删除旧的SSTFile,这意味着存储空间需求可能会超出原有数据占用空间,甚至翻倍。

在存储空间受限的场景下,基于LSM-Tree的压缩方案的压缩率难以确定,因为存储空间是持续动态变化的,而存储成本应包括空间占用的最大值。

主流的存储引擎各有千秋,特定场景下,各自也都存在着一定的局限性。那么,平衡业务系统中的多方面影响因素,如提升存储利用率、减轻频繁改造的压力,是解决业务场景困境的关键。

若压缩方案仅依据数据驻留于内存或硬盘来决定压缩与否,那么在处理超大数据量时,虽然压缩可以节省存储空间,但数据解压后载入内存,可能会导致业务读写性能下降,进而增加内存膨胀的风险。

那么,保持数据在内存和硬盘上的形态一致,应该是一个有效的解决方案,但很可能数据的压缩也会直接影响业务读写性能。

为了降低对业务的影响,我们需要分析业务的特征,而在众多业务场景中,具备的共性是数据的生命周期特点。在线业务数据具备冷热特征,随时间推进,数据的读写热度会逐渐降低,需要从新的角度审视业务性能、系统稳定性、数据压缩率等方面的均衡。

GaussDB的高级压缩特性提供了冷热数据分离策略,可以在不影响业务热数据读写性能的前提下,合理压缩冷数据,从而提高整体存储利用率。这是一种在业务性能影响、存储空间和系统稳定性之间取得平衡的解决方案。

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

评论

TA的专栏
GaussDB技术解读
收录8篇内容
openGauss源码解析
收录35篇内容
openGauss内核分析
收录10篇内容