TDengine Contributor 钟宇讲述 TSZ 压缩算法优化背后的故事

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 我们对 TDengine Contributor 钟宇进行了一次深入采访,他将从为何选择 TDengine 作为研究对象之一、TSZ 压缩算法的具体优化工作以及参与开源的感受等诸多方面展开分享。

TSZ 压缩算法是 TDengine 提供的一种可选压缩算法,专门用于浮点数据类型。它具有出色的压缩性能,能够在有损和无损状态下都提供更高的压缩率,甚至比默认压缩算法高出一倍,满足更高的数据存储需求。利用数据预测技术,TSZ 压缩算法更适合处理有规律变化的数据,如时序数据。但需要注意的是,由于其高效的压缩方法,TSZ 压缩可能需要更多的时间来执行,因此在 CPU 资源充裕且存储空间有限的情况下使用效果更佳。


最近,我们就有一条关于“TSZ 压缩算法”的“新闻”要和大家分享。

不久前,我们收到了这样一条消息,消息发送者是来自华中科技大学,武汉光电国家研究中心的硕士研究生钟宇。在该消息中,他表示在他们近期的一篇名为《ADT-FSE:A New Encoder for SZ》的学术论文中,针对 TDengine TSZ 压缩算法进行了相关改进。随后钟宇将这部分开源代码分享在了 TDengine 的 Github 社区上,成为了 TDengine 开源社区的又一名贡献者。


为了让更多富有开源精神、关注 TDengine 的小伙伴们了解到这段故事更为详细的一面,我们对钟宇进行了一次深入采访,他将从为何选择 TDengine 作为研究对象之一、TSZ 压缩算法的具体优化工作以及参与开源的感受等诸多方面展开分享。


采访实录


1、请介绍一下你自己。


感谢邀请,我来自华中科技大学,现在是武汉光电国家研究中心的一名研三硕士。我目前在吴非教授带领的“磐石新型非易失存储系统实验室”(NNSS)课题组。我个人的研究方向主要包括 NVMe 固态盘、压缩算法等。22 年 7~9 月份,我在深圳大普微实习期间,与公司的吕涛博士合作完成了优化浮点压缩器 SZ 的论文《ADT-FSE: A New Encoder for SZ》,这篇论文已被收录在今年的 SC 会议中,SC 是 CCF 认证的超算和存储领域的顶会。文章中 TDengine 作为时序数据库Time Series Database)领域的代表,成为 SZ 算法应用的一个重要场景。


2、什么契机让你接触到 TDengine,成为 TDengine 的贡献者?


首次接触到 TDengine 是在 SZ 研究开始时,当时听闻另一位学长准备在毕业设计做有关 TDengine 的研究,在讨论时了解到 TDengine 中引入了 SZ(即 TSZ)模块,并且集成在开源代码中。时序数据库作为一个有前景的、快速发展的领域,一直是我们团队想要开拓的方向,而 TDengine 在开源社区中的影响不小,并且一个开源且成熟的项目对于我们搞学术研究来说非常友好,因此我们也认为这是一个非常良好的契机。


3、为什么决定进行 TSZ 压缩算法的优化工作,优化结果如何?详细描述下原因


因为 SZ 作为一个业界领先的有损浮点压缩器,其实一直有一个缺点,这一点在 SZ 的开源代码库的 README 中也有说明——“SZ 不适合压缩非常小的文件”,而在数据库中,数据通常被切分为小块进行存储,例如 TDengine 中默认 4096 行数据为最小存储单元,如果使用单精度浮点类型(float)存储,则存储单元为 16KB。这个大小对于 SZ 动辄压缩数百 MB 甚至数 GB 的数据来说,已经非常小了,而我们在测试中也发现 SZ 在压缩该大小的文件时,出现了压缩比大幅下降、压缩解压缓慢等问题。


我们在大量的测试和量化分析后发现,SZ 压缩中使用的传统 Huffman 算法成为了导致该问题的主要瓶颈,传统 Huffman 算法在压缩结果中存储一颗 Huffman 树,以便解码时能还原出原数据。通常在压缩大文件时 Huffman 树的大小可以忽略不计,但我们的测试表明这颗树所占用的空间在小文件下显得不可忽略,这是问题的关键。


最终我们提出了 ADT-FSE 算法来替换传统 Huffman 算法,这是一种转码+压缩的方式,对原数据进行了一步转码,而后使用更先进的熵编码 FSE 算法来进行压缩,完全摒弃了 Huffman 树的消耗,不仅可以提升小文件压缩下的压缩比,还能提升压缩解压速度。在我们的测试中,ADT-FSE 使得 SZ 的解压速度快了 2x~8x,在 TDengine 中的压缩比提升了最高 5x。


钟宇贡献在 TDengine GitHub 社区上的代码(部分)


4、在整个优化过程中有没有遇到一些棘手的问题?如何破解的?


起初对于采用何种算法替代传统 Huffman 算法是难以确定的,我们尝试了直接使用通用压缩器 Zstd,或者熵编码 FSE 替代,但其效果都不是最佳,在一些情况下会比原始算法更差。最后我们是在另一个项目的开发中,发现 Zstd 内部有一种压缩大范围整数的思路,即先转码后压缩。受其启发,我们通过对 SZ 的数据进行分析,并对该思路进行学习、改进,最终才提出了最优的 ADT-FSE 算法。


在 TDengine 场景下的评估中,使用何种数据进行测试也是一个难题,因为我们并没有接触过真实场景的时序数据,另外 SZ 更适合压缩连续性较强的数据。最终我们选择了同样开源发表的 UK-DALE 数据集,其记录了真实家庭用电的电压数据。


5、你是什么时候开始关注开源参与开源项目的?你认为开源带给了你哪些帮助?


从本科期间开始,开源项目一直是我以及身边的同学们关注的重点。作为学生,开源是我们重要的学习平台,包括在 Linux 开源库中学习操作系统底层原理,在 fio、liburing 库中学习 I/O 相关知识,以及在 Zstd 开源库中学习压缩原理,等等。这些优秀的开源代码让每个人能接触到真实的场景和算法,同时也能学习良好的编程习惯。


另一方面,在读研之后,开源代码也是开展科研工作必不可少的条件。如若没有开源,对于较简单的项目而言,可能花几周、几个月复现,然后才可以开展研究工作。而复杂的系统则基本没有条件进行研究。因此我们在选择课题时,通常会优先考虑已开源的项目。


6、数据库很少有将集群版也进行开源的,你如何看待 TDengine 集群版开源这件事?


TDengine 的开源很成功,我在 GitHub 上看到其有 2 万多颗星,这在社区中的影响力非常大。我认为开源可以吸引全球范围内开发者的广泛参与,集思广益,对于项目本身的长远发展来说是有益的。TDengine 集群版开源,有助于吸收更多先进的、新鲜的血液,同时也使得用户对 TDengine 的了解更透明,增加其信任度。


7、作为 TDengine 的贡献者,你如何看待 TDengine 目前的发展?对 TDengine 还有哪些建议?


在开发过程中,我与开源社区的管理人员取得了联系,并获得了他们的很多帮助,合作过程非常愉快且充实。我感受到 TDengine 社区是非常健康且活跃的,涛思对于其开源社区的发展非常重视,我个人认为开源的 TDengine 是很有前景的。建议的话,如果有适合开发者的开发文档,比如说介绍模块所在文件,开发/调试的高效指令,对于新的开发者来说效率会更高一些吧。


8、你觉得 TDengine 在时序数据库领域里的优势是什么?


优势的话除了开源这一点外,在开发过程中感受到的一点是 TDengine 的生态比较丰富,与很多其他的开源项目和工具集成,能够给用户提供广泛的选择和灵活性。


9、对于自身的发展,未来是如何考虑的?


现在准备硕士毕业后直接工作吧,因为对我来说读博的时间成本比较大哈哈哈。毕业后可能继续在存储领域工作,此前在大普微和阿里云分别实习了一段时间,期间做的方向都相对比较底层,涉及到存储介质和软件层的交互,之后可能也会往存储基座的方向发展吧。现在正是在应届生秋招的时候,今年秋招也比较激烈,大家一起加油吧。


写在最后


近些年来,随着 TDengine 的产品功能不断精进、开源影响力逐渐扩大,越来越多的高校研究生和学者选择将 TDengine 作为研究课题输出论文,其中有像钟宇这样致力于功能改进的,也有很多着重于分析 TDengine 在工业物联网、智慧园区、自动驾驶、烟草工业等诸多行业的大数据场景下的应用及性能表现。此前为了帮助社区开发者更直接地进行参考和查阅,我们还针对此类论文进行过一次汇总——《关于 TDengine 的论文资料都在这里了,等你来取!》

除了这些外部资料之外,TDengine 也在帮助企业用户改造数据架构过程中,积累了很多实战经验,这些经验大多由企业开发者执笔创作生成了用户案例,集中发表在 TDengine 的官网博客(https://www.taosdata.com/tdengine-user-cases)上,大家也可作参考。

目录
相关文章
|
9天前
|
存储 人工智能 自然语言处理
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
Delta-CoMe是由清华大学NLP实验室联合OpenBMB开源社区、北京大学和上海财经大学提出的新型增量压缩算法。该算法通过结合低秩分解和低比特量化技术,显著减少了大型语言模型的存储和内存需求,同时保持了模型性能几乎无损。Delta-CoMe特别适用于处理数学、代码和多模态等复杂任务,并在推理速度上有所提升。
35 6
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
|
9天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
13天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
10天前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。
|
12天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
36 1
|
16天前
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
23 5
|
1月前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
1月前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
2月前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
1月前
|
存储 缓存 算法
优化轮询算法以提高资源分配的效率
【10月更文挑战第13天】通过以上这些优化措施,可以在一定程度上提高轮询算法的资源分配效率,使其更好地适应不同的应用场景和需求。但需要注意的是,优化策略的选择和实施需要根据具体情况进行详细的分析和评估,以确保优化效果的最大化。