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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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)上,大家也可作参考。

目录
相关文章
|
12天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
12天前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
23天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
22天前
|
存储 缓存 算法
优化轮询算法以提高资源分配的效率
【10月更文挑战第13天】通过以上这些优化措施,可以在一定程度上提高轮询算法的资源分配效率,使其更好地适应不同的应用场景和需求。但需要注意的是,优化策略的选择和实施需要根据具体情况进行详细的分析和评估,以确保优化效果的最大化。
|
23天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
23天前
|
存储 缓存 算法
前端算法:优化与实战技巧的深度探索
【10月更文挑战第21天】前端算法:优化与实战技巧的深度探索
19 1
|
24天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
1月前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
1月前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
72 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
1月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。