无损压缩和有损压缩的区别 无损压缩
前言数据库迁移上云是大数据时代的一大趋势,PolarDB MySQL是阿里云自研的云原生数据库,主要处理在线事务负载(OLTP, OnLine Transactional Processing),深受企业用户的青睐 。当下,数据分析对于企业的重要性越发显著:企业使用数据驱动决策,利用分析结果精准调配资源,从而降低成本,提升企业效率,推动业务创新,快速适应外部环境的变化 。然而,传统数仓架构的滞后性限制了企业的创新步伐 。因此,企业对OLTP数据库提出更高的要求,希望能在OLTP数据库同时进行复杂的实时分析(OLAP, OnLine Analytical Processing),及时应对业务环境的高速变化 。
为满足混合负载(HTAP, Hybrid Transactional/Analytical Processing)的需求,部分客户选择了MySQL + Clickhouse的方案,但困扰于着两套独立系统的高使用和高维护成本,以及系统间的数据不一致等问题 。客户寻求在一套系统上完美地应对HTAP负载的解决方案 。对此,PolarDB MySQL 技术团队提出了基于In-Memory Column Index(以下简称IMCI)的HTAP技术方案,在PolarDB MySQL行存支持OLTP的基础上,原生地构建列存索引以及实现列存计算引擎,支持高效地实时分析,在TPC-H测试中获得数百倍于行存的加速效果 。关于PolarDB HTAP和IMCI的详细介绍参考《400倍加速, PolarDB HTAP实时数据分析技术解密》<1> 。
本文介绍数据的压缩方法以及PolarDB HTAP在列存数据压缩上的工作 。PolarDB MySQL作为云原生数据库,具有存储计算分离的特点,计算资源独可以进行按需分配,而存储始终固定存在且持续增长的,需要压缩对存储成本进行控制 。IMCI的数据存储是为列存格式,列数据相比于行数据具有更高的相似性,利于数据压缩 。通过压缩,IMCI在大部分业务场景将列存存储空间减少到十分之一,大幅减少客户的存储成本 。另外IMCI通过数据压缩,减少数据的大小和存储访问开销,并探究将计算下推到压缩数据从而加速分析,进一步为客户提供更好的OLAP查询性能,实现HTAP系统性能和成本的兼得 。
后文主要分为4个部分,在“数据压缩概述”部分我们从数据压缩的理论基础——信息论谈起,结合数据库中的数据压缩问题进行讨论 。在“压缩算法分类和介绍”中,我们将压缩方法分为通用压缩和轻量压缩,介绍数据库中最常见的通用压缩方法原理,然后逐一介绍轻量压缩,并讨论字符串的轻量字典压缩,为下一个部分铺垫 。在“延迟解压加速计算”部分,我们介绍压缩数据上的直接查询的优化技术,又称为延迟解压技术,然后分析基于字符串字典压缩优化的原理和难点 。最后,我们进行“总结以及后续工作”的讨论,展望PolarDB HTAP在数据压缩方向的后续工作 。
数据压缩概述压缩算法包括无损压缩和有损压缩,本文我们只讨论无损压缩,即解压后的文本与压缩前的文本完全相同,后文的“压缩”都是指无损压缩 。压缩算法由编码和解码两部分构成,编码和解码本质上是将文本映射到另一个更紧凑的文本空间以及逆映射的过程 。
压缩与概率是紧密相关的 。所有的压缩算法对于输入数据都有一定的预先假设,这种假设可以用概率描述,例如假设某种数据重复的概率或某几种数据一起出现的概率高 。香农的论文《通信的数学原理》,被视为现代信息论研究的开端,正是信息论将数据出现的概率和数据所需编码长度联系起来 。在论文中,香农从统计物理学中借鉴了熵的概念,定义了信息熵<2>:












带collation的比较问题:在这个例子中,?bc和abc在字典编码的位置是保序的 8 < 100,但实际比较时带collation会认为它们相同(都是1),如果希望延迟解压优化,那么8和100需要被映射到1,这是一个额外信息,无法在不解压字符串的情况下获得(黄色曲线表示encode空间到collation空间的变换,有个“X”表示无法直接使用字符串的collation进行这个变换)
推荐阅读
- WPS如何撤销和恢复
- 13妖什么牌
- x和xs外观区别是什么
- 6.21英寸手机和6.5英寸哪个大
- 12:30pm是几点
- 如何制作大枣年糕
- 鸭血和猪血哪个好吃
- 欢乐斗地主怎么和好友一起玩 欢乐斗地主如何邀请和好友一起玩
- dress和skirt区别
- 0.45口径子弹和9毫米子弹哪个威力大
