TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理

news2024/11/28 16:53:50

TDengine 3.0 虽然对底层做了大规模的优化重构,但是相对于数据文件的工作逻辑和 2.0 相比是整体保持不变的。本系列文章的主旨在于帮助用户深入理解产品,并且拥有基本的性能调试思路,从而获得更好的产品体验。

本期文章会在讲解 TDengine 时序数据库 (Time Series DataBase)的索引文件(.head 文件)工作原理的同时,介绍索引文件在最新的 TDengine 3.0.2.5 中的优化。而在下一期的文章中,会对两大版本数据文件的差异做一个总结式的说明。

如下是 TDengine 的数据文件的结构——也就是这个四位一体的文件组。

在此前的文章,主要讲述的是 .data 和 .last(3.0 中已经更名为 .stt 文件)文件的工作原理。详情可见:https://mp.weixin.qq.com/s/OGS1WIlySSKveEOk4Reg3Q

接下来,我们将和大家一起以产品使用者的视角继续向前探索,揭开.head 文件的原理。

.head 类文件存储了 .data 文件中的数据块的索引信息。在.data文件中的每个数据块的 BRIN 索引信息在 .head 类文件中以表为分组,按照时间顺序递增,形成索引块组。(注:硬盘上的数据用的是 BRIN 索引,在落盘之前的内存数据用的是 skiplist 索引。)在查询的时候,会先加载这个 .head 文件中的索引信息,从而找到 .data 文件中的时序数据返回给用户。

(注:BRIN 索引指的是 Block Range Index,主要适用于有着天然顺序的数据集,由于不需要再做排序,所以资源耗费少,十分契合时序数据的查询,也是 TDengine 和关系型数据库的核心区别之一。)

一个清晰可见的逻辑是——索引的作用是帮助我们快速定位数据的位置,但当你操作索引的时间变得特别长的时候,索引的价值无形之中就会变低了。所以,在 .head 文件较大的时候就可能会出现影响查询性能的瓶颈。

而影响 .head 文件大小的因素有两个:

  • 一是 maxrows 和 minrows 这两个参数。很好理解,同样1000行数据,maxrows=200需要 5 个数据块,maxrows为 1000,只需要 1 块。每个数据块都需要一条索引信息存储在 .head 文件中。(详情可参考:https://mp.weixin.qq.com/s/OGS1WIlySSKveEOk4Reg3Q)

  • 另一个会让 .head 文件非常大的参数是 duration ( 即 2.0 中的 days)。我们知道 duration 是控制单个数据文件存储数据天数的参数 ( 详情可参考:https://mp.weixin.qq.com/s/uJEQwN0NnmSTBAMOecAtoA)。所以假如 duration 很大的话,单个数据文件存储的数据量就一定也很大,数据块就会很多。

以上的理论场景是真实发生过的——之前我们在支持某企业用户的时候,就曾遇到过生产环境上 duration 参数设置为 1000 多天导致数据查询性能严重下降的情况。但是由于 duration 参数建库后不能修改,所以最后只能导出数据,重新建库修改为合理的 duration 后再导回,这样问题才得以解决。(所以,默认值取 duration 为 10 就是一个折中的选择,实际使用时可以根据查询类型和机器性能灵活调试。)另外一个用户则是查询时间跨度大,查询并发量大 ,导致大量的服务器资源被用于读取 .head 文件影响了查询性能。

如果说前者还属于参数使用不当的话,第二个场景的查询并发量则是由用户的业务场景所决定的,因此我们针对后者的潜在瓶颈,在最新的 TDengine 3.0.2.5 中,针对 .head 文件做了一项重磅的优化——对于常用的表索引数据,会被放在缓存中(LRU 算法)。

这样一来,即便是不同的查询任务,只要所查询的表索引还在池子中缓存着,便不需要重复地读取 .head 文件了。由于涉及已落盘数据的查询基本都需要去首先访问 .head 文件,因此,该优化使得整体查询性能都得到了提升,而在特定场景下(如高并发)形成了较大幅度的突破。

结语

结合之前的几篇文章可以看到:keep,duration,maxRows,minRows 这些参数息息相关,牵一发而动全身,是不可以随便改动的,它们的数值不论过大还是过小都会引起使用问题。如果因为孤立地看待某个参数而带来了问题,用户可能会误以为这是产品本身的问题。因此,很多时候默认配置也是“很香”的。

而对于性能要求较高的用户,也可以通过熟读文档、代码、技术文章、视频等资料来调整参数以达到最佳性能,也欢迎联系 TDengine时序数据库(TSDB) 官方咨询企业版,以获得全方位的技术支持。

在最新发布的 3.0.2.5 上,我们还做了很多其他优化,稳定性和性能进一步提升。由于 3.0.2.x 是当前 3.0 的稳定版,因此版本号越大各方面都是越好的,建议大家可以尽快更新至最新版本。


想了解更多TDengine Database的具体细节,欢迎大家在GitHub上查看相关源代码。

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

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

相关文章

今天是情人节呐,我利用Python制作了好多表白的东西,快来吧~

今天是情人节那,有没有现在没有对象的宝子,评论里扣个111哈哈 目录 玫瑰 爱心树 丘比特 多彩气球 阿玥的小课堂 一、情人节的由来 二、情人节的来历和意义 玫瑰 局部代码实现如下: # 花瓣1 turtle.left(150) turtle.circle(-90, 70) …

【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)

【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER) 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录…

C语言思维导图大总结 可用于期末考试 C语言期末考试题库

目录 一.C语言思维导图 二.C语言期末考试题库 一.C语言思维导图 导出的图可能有点糊,或者查看链接:https://share.weiyun.com/uhf1y2mp 其实原图是彩色的不知道为什么导出时颜色就没了 部分原图: 也可私信我要全图哦。 图里的链接可能点不…

软件测试工程师,月薪8000是一个什么样的工作状态?

这个工资得看是在什么地方,如果是在北上深,在互联网圈子里面,这个工资偏低,而且8000的话要解决生活各种开销,基本最后都是所剩无几。但是如果是在生存压力没有那么大的城市,8000基本算是很不错的一个薪资待…

IP多播技术详解

文章目录前言IP多播技术的相关基本概念IP多播地址和多播组在局域网上进行硬件多播IP多播地址和多播MAC地址映射关系在因特网上进行IP多播网际组管理协议IGMP多播路由选择协议前言 随着计算机网络的发展和个人计算机的普及,人们能够方便的在网络上畅游,进…

【大数据】YARN节点标签Node Label特性

简介 YARN 的 Node-label 特性能够将不同的机器类型进行分组调度,也可以根据不同的资源要求进行分区调度。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。YARN的Node-label功能将很好的试用于异构集群中,可以更好地管理和调…

使用 RGB 值设置颜色

使用 RGB 值设置颜色 另一种可以在 CSS 中表示颜色的方法是使用 RGB 值。 RGB 即红色、绿色、蓝色(英语:Red, Green, Blue)。 ● 红色(R)0 到 255 间的整数,代表颜色中的红色成分。。 ● 绿色(G…

【数据结构】基础:图的最小生成树(附C++源代码)

【数据结构】基础:图的最小生成树(附C源代码) 摘要:将会在数据结构专题中开展关于图论的内容介绍,其中包括四部分,分别为图的概念与实现、图的遍历、图的最小生成树以及图的最短路径问题。本文主要介绍Krus…

机器学习经典算法总结

一,KNN 算法 K 近邻算法(KNN)是一种基本分类和回归方法。KNN 算法的核心思想是如果一个样本在特征空间中的 k 个最相邻的样本中的大多数属于一个类别,那该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确…

知识图谱表示

知识图谱表示 用某种语言对知识图谱进行建模,从而方便知识运算。 符号知识表示 :以符号逻辑为基础的知识表示方法。 特点:易于刻画显示、离散的知识。具有内生的可解释性。 不足:部分隐性知识不易符号化表示,故知识表…

Pr LOGO片头动画

哈喽,各位小伙伴!今天我们来学习一下如何制作简约文字LOGO片头动画? 新建序列 新建一个1920*1080的序列,在字幕上打上我们的文字(例:Ultraman) 调出基本面板,调整文字的位置&…

全栈项目【尚医通】预约挂号系统项目介绍

🐼个人主页:爪哇斗罗 🐼博主介绍:一名打工人 🐼签名:圣人之道,为而不争。 🐼一起交流,一起进步,一起互动。 ​ 目录 一.项目介绍 二.技术架构 2.1 架构选…

SpringBoot集成Swagger3(powernode document)(内含源代码)

SpringBoot集成Swagger3(powernode document)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87449720 目录SpringBoot集成Swagger3(powernode document&#xff0…

数据库锁的12连问,你顶得了嘛?

前言 金三银四很快就要来啦,准备了数据库锁的12连问,相信大家看完肯定会有帮助的。 1. 为什么需要加锁 在日常生活中,如果你心情不好想静静,不想被比别人打扰,你就可以把自己关进房间里,并且反锁。这就是…

Simulink自动代码生成:如何标准化的建模?以MAB,MISRA C 2012建模规范为例

目录 为什么要规范建模 MAB,MISRA C2012建模规范步骤 常用的规范总结 生成代码配置 总结 为什么要规范建模 MathWorks 咨询委员会 (MAB) 规范规定了在 Simulink 和 Stateflow 中建模的重要基本规则。这些建模规范的总体目的是让控制系统模型的建模者和使用方能…

自定义ESLint规则和修复功能

这是接上一篇自定义ESLint规则开发与使用的后续扩展,之前文章中详细讲述了怎么创建一个自定义的规则,这篇文章讲述怎么实现ESLint在检测出有问题的代码时,怎么自动fix问题。 比如我们要检测项目中所有http的协议,将其替换为https协…

Power BI 存储模式介绍(导入、DirectQuery、双)

本系列的文章: 《Power BI windows下载安装流程)》《Power BI 11个必学官方示例数据案例(附下载链接)》《Power BI 数据导入(SQL Server、MySQL、网页数据)》 一、背景原因 一般情况下,我们是…

测试开发面试基础题

1.对测试开发的理解 测试开发首先离不开测试,而软件测试是指,在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 而且,现在不仅仅是通过手工测试来发…

安装less-loader5出现webpack版本不兼容

今天遇到一个问题: 安装less-loader5之后其它包提示peerDependencies WARNING,意思是包版本不兼容。 【难题】 虽然NPM已经很自动化了,但依赖问题真的是一个难题,无法自动解决,需要人工干预调整。 【解决办法】 去查…

用户选择好用的投票小程序最有用的投票小程序微信推送里投票制作教程

“夏日非遗传承活动”网络评选投票_用户选择好用的投票小程序_最有用的投票小程序用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务…