PieCloudDB Database 多种压缩手段:降低数据库存储成本
随着企业数据规模的不断增长,数据库用户的关键业务系统面临着存储和处理庞大数据量的挑战。这不仅意味着更昂贵的 IT、数据成本,还包括更多的资源消耗和管理复杂性。为了满足企业的需求,云原生虚拟数仓 PieCloudDB Database 通过一系列的创新技术手段帮助企业降低成本并提高效率。
云原生虚拟数仓 PieCloudDB 从产品设计到产品研发,都注重为用户降本增效。PieCloudDB 采用存算分离架构,在冷热数据分析、数据波峰波谷场景下能显著降本增效。PieCloudDB 云上云版的按需付费模式可以保证用户成本效益最大化。除此之外,PieCloudDB 在数据压缩上也做了许多优化,打造自适应压缩方案,显著减少存储空间的需求,从而降低硬件成本。 同时也可以减少数据备份和恢复过程的时间和成本。本文将主要介绍 PieCloudDB 是如何在保证性能的前提下,采用多种自适应压缩与编码技术,为企业降本增效。
PieCloudDB 压缩与编码
1 支持 ZSTD
ZSTD(Zstandard)是一种高性能的无损压缩算法,由 Facebook 于2016年开源,算法旨在提供快速的压缩和解压缩速度,并同时达到较高的压缩比。以下是 ZSTD 的一些特点:
- 高性能: ZSTD 提供了非常快速的压缩和解压缩速度,在许多情况下甚至比其他流行的压缩算法更快。它采用了多级搜索、动态字典、预测模型等优化技术,以实现卓越的性能。
- 可调节的压缩比: ZSTD 支持可调节的压缩级别,允许你根据需要进行速度和压缩比之间的权衡。较低的压缩级别可以提供更快的速度,而较高的压缩级别则会获得更高的压缩比。
- 兼容性: ZSTD 的压缩格式是自包含的,这意味着你可以在不同平台和系统上使用压缩的数据,而无需依赖特定的库或工具。
基于以上特点,而且 ZSTD 在压缩率上优于目前 PieCloudDB 的压缩算法,所以我们在 PieCloudDB 中支持了 ZSTD。
1.1 压缩方式选择
PieCloudDB 创建 table 时,可以通过 compresstype 字段选择压缩方式,如果未设置则默认为 ZSTD:
CREATE TABLE ctbl_none (s text) WITH (compresstype = 'none'); CREATE TABLE ctbl_pglz (s text) WITH (compresstype = 'pglz'); CREATE TABLE ctbl_zstd (s text) WITH (compresstype = 'zstd');
1.2 压缩效率对比
对于 500 列的宽表,导入脚本随机生成的 86400 条数据的 CSV 文件(536MB),在不同压缩方式的 table 中所占大小:
PieCloudDB 无压缩(集群大小为1):
PieCloudDB pglz (集群大小为1):
PieCloudDB zstd(3) (集群大小为1):
1.3 测试统计
2 HLL 支持 Sparse 表示
PieCloudDB 的存储系统简墨使用了一种行列混存的格式,每个文件块中都包含了表的部分行数据。为了统计表中每一列的唯一值数量,PieCloudDB 采用了 HLL(Hyperloglog)结构来进行基数估计。过去,HLL 只使用了一种称为"dense"的表示方式,其中一个 HLL 结构占用约 12KB 的空间(一个 HLL 16384个桶,每个桶 6bit),但对于宽表来说,每个文件块中的 HLL 结构就会变得非常庞大。举个例子,如果一个宽表有 1500 列,那么每个文件块的 HLL 部分将占用大约 18MB 的空间。
针对这个问题,考虑到宽表在一个文件块中不会有很多行数据,因此 HLL 中的很多桶都是空的,那么可以采用 RLE(run length encoding) 的方式来作为 HLL 的 Sparse 表示,RLE 的基本原理:
- 连续序列检测: RLE 首先扫描待压缩的数据序列,检测连续出现相同的数据项。
- 计数: 对于每个连续序列,RLE 计算该序列中数据项的数量,并将其转换成一个计数值。
- 编码: RLE 将原始数据序列替换为一组(数据项,计数值)的对,表示连续出现的数据项和其数量。
- 存储: 最后,压缩后的数据可以按照顺序存储为一系列数据对,以减小存储空间。
2.1 压缩效率对比
对于初始情况下,如果是 dense 表示,就算 HLL 的桶全为空,也需要 12KB 的空间,而对于 Sparse 表示,只需要 2B。这在基数较低的情况下,减少空间是非常明显的。如下对于一个 1500 列的简墨表,插入 100 行数据,HLL 支持 Sparse 表示前后所占空间对比:
HLL 未支持 Sparse 表示:
HLL 支持 Sparse 表示:
2.2 测试统计
3 Delta Encoding
Delta Encoding(增量编码)是一种数据压缩技术,用于存储具有连续性或重复性的数据。它通过记录相邻数据之间的差异来减小存储空间。
基本原理如下:
- 初始值:选择一个初始值作为基准。这可以是前一个数据点、第一个数据点或任何其他适当的值。
- 计算差异:对于每个后续的数据点,计算其与前一个数据点之间的差异。这可以使用简单的减法运算来实现。
- 存储差异:将计算得到的差异值存储起来。通常,差异值会以二进制形式进行编码,并存储在适当的数据结构中(如数组)。
- 重建原始数据:在需要使用数据时,通过累计差异值和基准值来重建原始数据。从基准值开始,依次加上累积的差异值即可得到原始数据的序列。
3.1 压缩效率对比
Delta Encoding 的优点是能够有效地处理连续或重复的数据,并且在存储空间方面表现出色。它特别适合对时间序列数据、排序的列表或其他具有递增或递减趋势的数据进行压缩。
PieCloudDB 对于变长数据存储,通过 offsets 来存储每个数据的长度。而对于某些类型,如 Decimal,前后数据之间 offset 变化相等,采用Delta Encoding 的方式,可以显著减少 offsets 的存储空间。特别对于 Decimal 这种本身数据就很短的类型,可能就更明显了。
例如 1500 列类型为 NUMERIC(20,10) 的宽表,在未使用 Delta Encoding 情况下为 550MB,使用 Delta Encoding 后为 377MB,结果如下图所示:
3.2 测试统计
4 总结展望
PieCloudDB 将打造自适应压缩,通过支持 ZSTD、HLL sparse representation、Delta Encoding,在通用数据、元数据、字符串类型数据上大幅降低的存储大小。后续,PieCloudDB 会持续优化迭代压缩方法,支持拓展更多的编码方式,例如 Dict Encoding、BIT_PACKED、RLE 等,根据数据类型的不同,选择合适的编码方式,从而达到更好的压缩比。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
详解KubeEdge EdgeMesh v1.15 边缘CNI特性
本文分享自华为云社区《KubeEdge EdgeMesh v1.15 边缘CNI特性原理及功能详解》,作者:达益鑫 |南开大学,刘家伟、吴锟 |DaoCloud,王杰章 |华为云 特性研发背景以及原理 KubeEdge EdgeMesh 边缘 CNI 特性针对于边缘容器网络复杂异构环境提供与云上一致的容器网络体验,包括: 1. 云边统一的容器网络资源管理分配 2.基于分布式中继及穿透能力的 PodIP 级别跨子网流量转发服务 特性开发背景 EdgeMesh 致力于研究和解决边缘计算场景下网络连通、服务协同、流量治理等相关的一系列问题,其中在异构复杂的边缘网络环境内,不同物理区域的容器在面对动态变迁的网络环境以及短生命周期且跳跃变迁的服务位置,一部分服务可能需要使用 PodIP 进行跨网段通信,而主流的 CNI 方案主要针对于云上稳定且集成式的网络环境,并不支持跨子网流量的转发,致使这些 CNI 方案并不能够很好地适应边缘复杂异构的环境,最终导致容器即便在同一个集群内却没有享用一个平面的网络通信服务。 针对这个需求,EdgeMesh 进行逐步的优化。首先实现的是网络底层的中继以及穿透服务...
- 下一篇
Milvus 上新:支持上万个 Collection、新增 Accesslog 功能……
2024 年开年,Milvus 好消息不断。除了收获 Github 25,000 颗星的成就,Milvus 也发布了新年的第一个版本—— 2.3.4。 此次发版的主要目的是为用户提供一个高扩展性且更易用的 Milvus 版本。为此,Milvus 新增了许多易用性功能,比如:可追踪外部接口调用的 accesslog;对 parquet 数据格式的导入做了支持;引入了更清晰的错误消息;更快的加载速度以及更好的查询分片平衡能力。在扩展性方面,团队通过对内部处理逻辑进行优化以及对内存使用效率的提升,使得 Milvus 集群目前可支持多达 10,000 个 Collection,可以满足大数据量和多租户场景下的要求。 以下将对这些主要特性和重点优化进行解释说明: 支持上万的 Collection/Partition 数量 Collection/Partition 是 Milvus 管理逻辑集合的主要单元,类似关系型数据库里 Table/Partition 的概念。虽然理论上 Milvus 能支持 65,536 个 Collection,但在实际使用中,随着 Collection 数量的增加,系统...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题