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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 我们对 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)上,大家也可作参考。

目录
相关文章
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
本文旨在探讨深度学习中常用的优化算法,包括梯度下降、动量方法、AdaGrad、RMSProp和Adam等。通过分析每种算法的原理、优缺点及适用场景,揭示它们在训练深度神经网络过程中的关键作用。同时,结合具体实例展示这些优化算法在实际应用中的效果,为读者提供选择合适优化算法的参考依据。
|
8天前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
25 2
|
10天前
|
机器学习/深度学习 算法 物联网
探究操作系统的心脏:调度算法的演变与优化
本文旨在深入探讨操作系统中核心组件——调度算法的发展脉络与优化策略。通过分析从单任务到多任务、实时系统的演进过程,揭示调度算法如何作为系统性能瓶颈的解决关键,以及在云计算和物联网新兴领域中的应用前景。不同于传统摘要,本文将注重于概念阐释与实例分析相结合,为读者提供直观且全面的理解视角。
|
12天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
30 4
|
1月前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
22天前
|
机器学习/深度学习 算法
深度学习中的优化算法:从梯度下降到Adam
本文深入探讨了深度学习中的核心——优化算法,重点分析了梯度下降及其多种变体。通过比较梯度下降、动量方法、AdaGrad、RMSProp以及Adam等算法,揭示了它们如何更高效地找到损失函数的最小值。此外,文章还讨论了不同优化算法在实际模型训练中的表现和选择依据,为深度学习实践提供了宝贵的指导。
52 7
|
1月前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
165 1
|
14天前
|
算法
基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真
该程序基于蚁群优化算法(ACO)为无人机(UAV)规划最优巡检路线,将无人机视作“蚂蚁”,巡检点作为“食物源”,目标是最小化总距离、能耗或时间。使用MATLAB 2022a版本实现,通过迭代更新信息素浓度来优化路径。算法包括初始化信息素矩阵、蚂蚁移动与信息素更新,并在满足终止条件前不断迭代,最终输出最短路径及其长度。
|
17天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种结合粒子群优化(PSO)与分组卷积神经网络(GroupCNN)的时间序列预测算法。该算法通过PSO寻找最优网络结构和超参数,提高预测准确性与效率。软件基于MATLAB 2022a,提供完整代码及详细中文注释,并附带操作步骤视频。分组卷积有效降低了计算成本,而PSO则智能调整网络参数。此方法特别适用于金融市场预测和天气预报等场景。
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法
本文将探讨深度学习中的几种常见优化算法,包括梯度下降、动量方法、AdaGrad、RMSProp和Adam。这些算法在训练神经网络时发挥着重要作用,通过调整学习率和更新策略,能够显著提高模型的训练效率和性能。了解这些优化算法有助于更好地应用深度学习技术解决实际问题。
下一篇
无影云桌面