存储空间紧张?来看 TDengine TSZ 压缩算法如何显著提升压缩率

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本篇文章中,我们将就如何在 TDengine 中开启 TSZ 压缩算法进行详细说明,并会针对 TSZ 压缩算法展开功能测试,为大家验证其在实际业务场景中的更优性能。

TSZ 压缩算法是 TDengine 为浮点数据类型提供的可选压缩算法,可以实现浮点数有损至无损全状态压缩,相比默认压缩算法,TSZ 压缩算法压缩率更高,即使切至无损状态,压缩率也会比默认压缩高一倍。一般来说,TSZ 压缩算法是通过数据预测技术完成的压缩,所以更适合有规律变化的数据。同时 TSZ 压缩时间会更长一些,在我们的服务器 CPU 空闲、存储空间紧张的情况下适合选用。


在此前发布的《压缩比提高5倍!贡献者+1》一文中,华中科技大学、武汉光电国家研究中心的硕士研究生钟宇为大家详细介绍了其在近期发表的学术论文中,针对 TDengine TSZ 压缩算法进行的相关改进。本篇文章中,我们将就如何在 TDengine 中开启 TSZ 压缩算法进行详细说明,并会针对 TSZ 压缩算法展开功能测试,为大家验证其在实际业务场景中的更优性能。


在 TDengine 中开启 TSZ 压缩算法

TDengine 3.2.0.0 及以上版本中支持此压缩算法。在 taos.cfg 配置中增加以下内容,即可开启 TSZ 压缩算法,功能打开后,会替换默认算法。以下表示字段类型是 float 及 double 类型都使用此压缩算法,也可以单独只配置一个。


lossyColumns     float|double


配置成功后需要重启服务才能生效,当 Taosd 日志输出以下内容时,即表明功能已生效:


02/22 10:49:27.607990 00002933 UTL  lossyColumns     float|double


配置参数

FLOAT 类型精度控制:

DOUBLE 类型精度控制:

TSZ 压缩中可选择的算法 FSE,默认为 HUFFMAN:

但需要注意的是,打开 TSZ 后生成的存储数据格式,在回退至 3.2.0.0 之前的版本后数据将不能被识别。


TDengine TSZ 压缩算法功能测试

数据正确性

首先我们需要验证写入数据被 TDengine 存储后再次读取出来的正确性:


  • 通过 0-others/compress_tsz1.py 实现;
  • 写入 10 个子表, 每子表 10 万数据,分别写入 float 和 double 字段指定的随机值,写入完成后全部再读取出来,和原来写入时的值进行比较。原来写入的值把整数及小数部分分别在两个 int64 的字段中保存,验证时再读取出来合成一个浮点数进行验证。验证的误差 float 为 1e-6, double 为 1e-12;
  • 验证通过,数据完全正确。


数据兼容性

首先我们需要先写入打开 TSZ 压缩的数据,然后再写入关闭 TSZ 压缩的数据,此阶段测试预期是不管 TSZ 选项打开或关闭,原来使用 TSZ 写入的及没有使用 TSZ 写入的都能正确读取出来。


测试步骤如下:


  1. 配置 TSZ 选项为打开 lossyColumns float|double
  2. 启动 taosd
  3. 创建数据库及表,表中包括 float 及 double 字段
  4. 写入 100 万条数据
  5. 写入成功后读取并查看数据正确性
  6. 退出 taosd 并关闭 TSZ 选项
  7. 启动 taosd 并写入新数据到表中


测试结果显示原来的数据及新写入数据,都正常为符合预期,反复打开及关闭 TSZ,不影响已写入数据的正常存取。


性能比较

我们对本次新引入的 FSE 算法、原来的算法,及关闭 TSZ 压缩后的三个场景作为三种方案进行对比测试,验证打开 TSZ 算法及使用 TSZ 新的 FSE 算法的效果。本次测试的数据规模如下:1 个超级表,2 个子表,每子表 100 万条数据,子表为 25 列 (其中 float 11 列、double 11 列)。


下表为最终测试结果:

从上表可知,方案一中新增的 FSE 算法打开后写入性能优于原来的算法,符合预期;其次,TSZ 压缩算法打开比关闭时,在写入性能、查询及压缩率方面均有小幅提升,此结论也符合预期。


写在最后

在阅读完本篇文章后,你一定对在 TDengine 中开启 TSZ 压缩算法及如何打造更优质性能有了更深入的了解,现在你可以进行操作了。如果在实操过程中碰到任何问题或难点,可以联系我们,和资深研发工程师进行面对面沟通。

目录
相关文章
|
7月前
|
算法 测试技术 C++
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
|
7月前
|
算法 JavaScript Java
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
【状态压缩】【动态规划】【C++算法】1125.最小的必要团队
|
23天前
|
存储 人工智能 自然语言处理
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
Delta-CoMe是由清华大学NLP实验室联合OpenBMB开源社区、北京大学和上海财经大学提出的新型增量压缩算法。该算法通过结合低秩分解和低比特量化技术,显著减少了大型语言模型的存储和内存需求,同时保持了模型性能几乎无损。Delta-CoMe特别适用于处理数学、代码和多模态等复杂任务,并在推理速度上有所提升。
58 6
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
|
1月前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
55 0
|
5月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
69 1
|
5月前
|
算法 Java 程序员
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
55 0
|
7月前
|
存储 编解码 算法
图像的压缩算法--尺寸压缩、格式压缩和品质压缩
图像的压缩算法--尺寸压缩、格式压缩和品质压缩
153 0
|
7月前
|
机器学习/深度学习 人工智能 算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
59 0
|
7月前
|
机器学习/深度学习 存储 编解码
利用深度学习优化视频压缩算法
【4月更文挑战第28天】随着数字媒体时代的到来,视频数据量急剧增加,有效的视频压缩技术变得尤为重要。本文探讨了一种基于深度学习的视频压缩框架,旨在提高压缩效率同时保持较高的视频质量。通过使用卷积神经网络(CNN)对视频帧进行特征提取,并结合先进的编码技术,本研究提出了一种新的率失真优化算法。实验结果表明,该算法在多个标准测试序列上相比传统方法能显著降低比特率,同时维持了良好的视觉质量。
|
7月前
|
存储 SQL 算法
ADB PG最佳实践之压缩算法的最佳选择
导读:在做ADB PG的业务表DDL设计时,应该如何选取压缩算法和压缩级别?本文以实际场景PoC测试来为用户提供压缩算法选取相关最佳实践。
247 0