TDengine TSZ 压缩算法优化背后的故事,要从一篇学术论文说起

news2024/11/13 22:41:07

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

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

TDengine Contributor 钟宇讲述 TSZ 压缩算法优化背后的故事 - TDengine Database 时序数据库

不久前,我们收到了这样一条消息,消息发送者是来自华中科技大学,武汉光电国家研究中心的硕士研究生钟宇。在该消息中,他表示在他们近期的一篇名为《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 Contributor 钟宇讲述 TSZ 压缩算法优化背后的故事 - TDengine Database 时序数据库

钟宇贡献在 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 的官网博客(时序数据库 - 用户案例 - TDengine | 涛思数据)上,大家也可作参考。

如果你针对本次采访还有更深入的问题想要了解,或者想就数据问题咨询 TDengine 解决方案架构师,可以添加小T vx:tdengine,详细说明你的诉求,我们会给与你及时的帮助。


了解更多 TDengine Database的具体细节,可在GitHub上查看相关源代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1230586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Idea 2023.2.5配置(插件、Maven等)

IDEA2023.2.5配置 一. 插件Alibaba Java Coding Guidelines plugin supportMaven HelperMyBatisXSonarLintTranslationVuesion Theme 二. 自定义创建live template,快速写代码三. 修改全局配置3.1 Maven配置3.1.1 安装MavenStep1. 下载Step2. 安装Step3. 创建系统环…

百度爬虫的工作原理解析

百度作为中国最大的搜索引擎,其工作原理备受关注。本文将深入探讨百度爬虫的工作原理,介绍其基本流程以及关键技术,帮助读者更好地理解搜索引擎背后的技术核心。 百度爬虫是百度搜索引擎的重要基石,它们被广泛用于收集互联网上的网…

桶装水订水小程序开发搭建;

水厂订水送水小程序是一款便捷的水产品订购与配送应用,基于小程序平台,用户可以轻松浏览、选购各类水产品,如矿泉水、纯净水、桶装水等,并享受送货上门服务。下面我们详细介绍它的主要功能。 一、丰富的商品展示 订水送水小程序汇…

多表查询内连接、外连接、子查询、笛卡尔积

1.1 多表查询:从多张表中进行查询 仅仅使用select * from tb_emp,tb_dept查询语句会显示如下结果(笛卡尔积:两个表的所有的组合情况)其中很大部分数据是冗余的。 1.2内连接:相当于查询A,B表交集部分的数据&#xff08…

stable-diffusion-webui之webui.py

主要就是webui的启动这块,需要初始化的地方,东西还是挺多的。

如何从零开始制作一本企业宣传画册?

最近公司领导要求为公司制作一本企业宣传画册,用来展示我们的产品和服务,增加品牌影响力。可是,像我这种零基础的小白,完全不知道如何制作啊?对此我感到很焦虑,怕做不好影响公司形象,也怕耽误时…

MIUI查看当前手机电池容量

MIUI查看当前手机电池容量 1. 按如下步骤操作生成bug报告 2. 按如下操作解压bug报告 Last learned battery capacity

深入理解 synchronized 原理

目录 一. 前言 二. Java对象的内存布局 2.1. 对象头 2.2. Mark Word 2.3. Class Metadata Pointer 2.4. Length 三. 偏向锁 3.1. 偏向锁的工作流程 3.2. 偏向失效 3.2.1. 误区一 3.3. 偏向撤销 3.3.1. 误区一 3.4. 偏向撤销的底层实现 3.5. HashCode与偏向撤销 …

[Kettle] 获取系统信息

系统信息是指Kettle系统环境的信息,包括了计算机系统的日期、星期等时间类型信息,计算机名称、IP地址等设备信息,Kettle系统转换过程中的信息等 需求:为方便读取计算机上的本月最后一天的交易数据文件,需要通过获取系…

词向量笔记

一、词向量的世界排名比赛MTEB MTEB: Massive Text Embedding Benchmark 二、词向量的维数 词向量的维数d1一般取20~500之间

不标年份的葡萄酒质量好吗?

我们在葡萄酒标上经常看到生产年份,也就是指全部葡萄采摘的年份。旧世界葡萄酒产国认为葡萄酒年份对他们的影响较大,而新世界葡萄酒,年份的意义就稍微小些。甚至有一部分葡萄酒酒标上没有年份。在酒标上没有标注年份的葡萄酒,被称…

ELK企业级日志分析平台

目录 一、elasticsearch 1、集群部署 2、cerebro部署 3、elasticsearch-head插件部署 4、elasticsearch集群角色分类 二、logstash 1、部署 2、elasticsearch输出插件 3、file输入插件 4、file输出插件 5、syslog 插件 6、多行过滤插件 7、grok过滤 三、kibana数…

网络工程师-HCIA网课视频学习

这里是速成的,只积累下,自己未曾学习到的东西。通过书本补充知识点。 视频:hcia17-链路聚合_哔哩哔哩_bilibili hcia16-路由高级特性: hcia17-链路聚合: 由于如果根据视频来学习的话,感觉视频的总结并不…

什么牌子的猫罐头好?性价比高的猫罐头推荐

很多铲屎官遇到过这样的问题!他们购买了各种高质量的猫罐头,但猫咪却不吃或者吃了一段时间后出现软便等身体不适的情况。 作为一个担任了6年铲屎官的人,我对猫咪的日常饮食有着一定的了解。我给我家的猫咪尝试过很多种罐头。在这里&#xff0…

行情分析 - - 加密货币市场大盘走势(11.20)

大饼还是之前的策略,37000附近入场空单合适,目前4小时级别即将形成死叉,入场空单收益较大。 空单策略:入场37000附近 止盈34000-33000 止损39000 以太按照预期回调,笔者已经在1920打了止盈,目前没有入场&a…

HIS系统源码,云HIS源码,二级医院信息管理系统源码,预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站、护士工作站

云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务,提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工作站等一系列常规功能,还能与公卫、PACS等各类外部系统融合…

高效案例检索工具,Alpha案例库智慧检索成为律师检索工具首选

“工欲善其事,必先利其器。”当今,律界同仁需要权衡的问题早已不是“要不要”使用法律科技,而是如何高质量、高效率地使用法律科技工具。在业内人士看来,随着人工智能技术的不断发展,法律行业科技化将成为不可逆转的趋…

KaiwuDB 监控组件及辅助 SQL 调优介绍

一、介绍 KaiwuDB 具备完善的行为数据采集功能,此功能要求 KaiwuDB 数据库系统 C/E/T 端不同进程的不同维度的指标采集功能十分完善;在不同进程完成指标采集后,会通过 Opentelemetry 和 Collector 将指标存入 Prometheus,以便查找…

这两个让你直呼卧槽的软件,超级实用

不知道大家有没有碰到这种情况呢?在手机上解压文件解压不了,还得去电脑上下载之后解压,特别麻烦 为了解决这一问题,所以今天给大家准备 两款 解压缩 神器,让大家解的越来越熟练。 解压精灵 解压精灵这是一款解压缩并且…

docker打包chatpdf(自写)

docker打包上传 docker build -t kitelff/chatpdf:v0.1 .##修改镜像名字 docker tag c2c1a0eb4e08 kitelff/chatpdf:v0.1## push docker push kitelff/chatpdf:v0.1上传文件,测试效果