【GaussTech技术专栏】GaussDB高级压缩,破解业务数据激增难题
【摘要】 随着企业业务的迅猛发展,数据库系统中的数据量急剧膨胀。尤其是在采用分布式数据库或多副本技术的大规模业务架构时,业务数据量的增长尤为显著。面对这一挑战,数据压缩成了考虑的首选策略。然而,数据压缩的影响远不止于压缩率这一单一指标所能概括,它对业务系统的稳定性、综合性能等影响是多方面的,也将是我们评估压缩策略时的关键因素。在处理历史遗留的复杂业务架构时,无论是扩容还是进行分布式改造,往往是一项复杂...
随着企业业务的迅猛发展,数据库系统中的数据量急剧膨胀。尤其是在采用分布式数据库或多副本技术的大规模业务架构时,业务数据量的增长尤为显著。面对这一挑战,数据压缩成了考虑的首选策略。然而,数据压缩的影响远不止于压缩率这一单一指标所能概括,它对业务系统的稳定性、综合性能等影响是多方面的,也将是我们评估压缩策略时的关键因素。
在处理历史遗留的复杂业务架构时,无论是扩容还是进行分布式改造,往往是一项复杂且耗时的任务。为了降低这些操作的频率,并提高存储资源的利用率,我们需要探索有效的解决方案,以确保对业务最小化影响和系统稳定运行。
一、数据库压缩不应只是压缩率
在企业核心业务支撑的数据库系统使用场景中,开发人员必须全方位监控数据库的运行状况。对于存储资源利用率的挑战,一个直观的解决方案是提升存储系统压缩率,以实现存储空间的节省,或在有限的资源下存储更多的业务数据。然而,数据的压缩和解压过程可能会导致访问延迟、内存膨胀或磁盘占用率的剧烈波动,从而增加系统运行的风险。
图1 非压缩方案与压缩方案性能对比
非压缩方案与压缩方案性能对比,如图1所示。比如,压缩和解压操作会消耗CPU资源,进而对系统性能产生影响。而数据在压缩前后硬盘和内存中的大小差异,也可能给数据库内存管理带来风险。因此,从业务系统和数据库的整体角度出发,如何平衡压缩率和系统性能,成为应对业务快速增长带来的存储问题的关键难点之一。
在面对需要分布式改造的超大单表,或需要频繁扩容的分布式系统中的重量级数据库表时,不仅需要关注上述性能指标和系统稳定性,还需要考虑提高资源利用率的方案是否会带来额外的业务改造成本。此外,考虑到数据的生命周期,业务系统中提高资源利用率的方案不应因数据的新旧而产生交叉影响。由于不同库表的生命周期特点各异,压缩策略也应相应地采取差异化的处理。
二、不同存储引擎架构下的压缩技术特点
通过之前的讨论,我们对数据库压缩解决方案的方向有了初步的认识。那么,数据库压缩方式有哪些实现方式呢?下面将摘取几个技术要点进行分析,并结合GaussDB存储内核原理列举几个优势用例。
在当前主流数据库系统中,存储引擎的组织方式多样,包括堆组织表和索引组织表,它们基于不同的存储原理,如B-树结构、LSM-Tree结构,以及追加更新和原地更新等关键技术,构成了存储引擎架构的核心。
这些技术究竟是如何与压缩技术相结合的呢?
对于堆组织表,数据库以页为单位(如8KB)分配存储空间,并按照数据写入顺序将行存储在页内。一个表空间内可以关联多个页面,使得整体表空间大小保持稳定;索引结构,通常采用B-树或B+树,用于关联堆表中的每行数据,不仅存储索引键,还存储行指针,使得数据长度相对较小。堆组织表和普通索引结构,如下图2所示。
图2 堆组织表和普通索引结构
相比之下,索引组织表采用索引排序的方式存储,如图3所示,树结构的叶子节点不仅存放索引键,还存储主键,使得数据长度相对较长,对查询更为友好。但在大量数据插入时,需要寻址且产生大量随机写,可能导致数据写入过程缓慢。
图3 索引组织表的结构
而LSM-Tree结构是由核心的memtable和SSTFile组成的多层架构,对业务数据导入非常高效。数据的增、删、改操作,首先以追加的方式更新到memtable,随后通过Flush和Compaction操作进行SSTFile的归并。
图4 LSM-Tree结构及合并过程
这一过程中,如图4所示,涉及不同层级SSTFile的归并排序,导致大量的I/O操作和CPU计算。特别是在大量更新和删除操作后,Compaction操作会导致存储空间膨胀,以及I/O和CPU资源的波动性消耗。这是由于Compaction操作需要先申请新的SSTFile,完成数据归并后再删除旧的SSTFile,这意味着存储空间需求可能会超出原有数据占用空间,甚至翻倍。
在存储空间受限的场景下,基于LSM-Tree的压缩方案的压缩率难以确定,因为存储空间是持续动态变化的,而存储成本应包括空间占用的最大值。
主流的存储引擎各有千秋,特定场景下,各自也都存在着一定的局限性。那么,平衡业务系统中的多方面影响因素,如提升存储利用率、减轻频繁改造的压力,是解决业务场景困境的关键。
若压缩方案仅依据数据驻留于内存或硬盘来决定压缩与否,那么在处理超大数据量时,虽然压缩可以节省存储空间,但数据解压后载入内存,可能会导致业务读写性能下降,进而增加内存膨胀的风险。
那么,保持数据在内存和硬盘上的形态一致,应该是一个有效的解决方案,但很可能数据的压缩也会直接影响业务读写性能。
为了降低对业务的影响,我们需要分析业务的特征,而在众多业务场景中,具备的共性是数据的生命周期特点。在线业务数据具备冷热特征,随时间推进,数据的读写热度会逐渐降低,需要从新的角度审视业务性能、系统稳定性、数据压缩率等方面的均衡。
GaussDB的高级压缩特性提供了冷热数据分离策略,可以在不影响业务热数据读写性能的前提下,合理压缩冷数据,从而提高整体存储利用率。这是一种在业务性能影响、存储空间和系统稳定性之间取得平衡的解决方案。
三、一个典型场景的对比效果
在典型的数据生成、更新和删除场景中,持续的数据更新和删除操作与频繁的范围查询操作共存。
LSM-Tree引擎在保持默认压缩特性下,将表现出范围查询的耗时越来越大,我们还能观察到因合并行为带来的巨大耗时波动。这是因为LSM-Tree需要遍历查询SSTFile和memtable中被标记删除的数据。随着持续删除的数据越多,范围查询请求的耗时会越来越大,如图5所示。
图5 查询耗时性能表现对比
相比之下,GaussDB的查询耗时基本保持平稳。这得益于GaussDB的引擎采用Blink-Tree索引堆组织表结构和高级压缩技术。高级压缩实现了存储空间的重复利用,使得整体存储空间变化相对稳定,确保了业务查询耗时稳定。
四、面向数据库全场景的压缩解决方案
通过上述分析,面对固有业务存储增长的挑战,亟需一个全面的数据库内部压缩解决方案。这个方案应全面覆盖各种业务场景,并从压缩数据对象和压缩策略/手段的角度,贴近实际业务需求。
其中,压缩数据对象分类包括用户数据表、索引、流式日志和其他对象。而压缩策略/手段包括数据冷热分离策略(时间/表达式)、多档次压缩级别、表/库级独立配置策略、其他数据语义压缩、其他方面数据生命周期管理技术。
如果需要对数据生命周期管理手段更丰富化,可以收集数据使用情况信息,生成数据热力图,实现业务系统冷热数据评估和预测。基于数据热力图,可以扩展存储介质的多样化使用和增强系统负载感知等,为控制业务成本提供更精准的指导。
五、GaussDB高级压缩,一个更优的选项
GaussDB高级压缩是一个数据库内部全场景压缩解决方案,旨在突破业务系统中的数据量快速增长所带来的困境。
• 全场景覆盖:GaussDB高级压缩技术涵盖了用户库表数据、索引等数据压缩,通过以业务数据的修改时间为主,可选以判断表达式,实现数据压缩冷热分离,有效减轻对业务场景的实际影响。
• 动态压缩率:在压缩率方面,采用规则类型编码方式,在不同的数据表模型和数据取值分布情况下,将会产生不同的压缩效果。
• 灵活的压缩级别:它还提供了多种可选的压缩级别,允许用户根据不同库表的具体需求,独立配置相应的压缩策略。
GaussDB的高级压缩技术专注于最小化对业务延迟的影响,确保整体业务性能保持在可接受的范围内。比如,对热数据的业务访问不受影响,且对冷数据的访问性能仅有轻微下降。
从数据生命周期的角度看,随着业务的扩展,冷数据逐渐累积。通过高效压缩冷数据,GaussDB能够在有限的存储空间内支持更长时间的数据增长,从而有效降低业务扩容或分布式改造的频次。
六、总结
GaussDB的高级压缩策略,充分考虑数据生命周期的特性,结合业务架构的固有规律,力求在存储效率、访问性能和系统稳定性等多个关键指标之间找到最佳平衡点。未来,GaussDB将继续根据业务场景的需求,扩展更多高效的压缩解决方案,并引入具有竞争力的新技术。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)