首页 > 其他分享 >TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理

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

时间:2023-02-14 16:15:14浏览次数:71  
标签:文件 head TDengine 查询 索引 3.0 2.5

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

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

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

TDengine 时序数据库 - TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理 image 6

在此前的文章,主要讲述的是 .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上查看相关源代码。

 

标签:文件,head,TDengine,查询,索引,3.0,2.5
From: https://www.cnblogs.com/taosdata/p/17119904.html

相关文章

  • R语言空气污染数据的地理空间可视化和分析:颗粒物2.5(PM2.5)和空气质量指数(AQI)|附代码数
    原文链接:http://tecdat.cn/?p=23800最近我们被客户要求撰写关于空气污染数据的研究报告,包括一些图形和统计输出。由于空气污染对公众健康的不利影响,人们一直非常关注。世......
  • 2023.02.03
    继续凸优化,wqs二分+闵可夫斯基和,有点数据结构的味道wqs二分slopetrick闵可夫斯基和......
  • 记录一下2023.02.13
        今天是开学第一天,下午就进行了javaweb的测试,考试内容跟期末考试的差不多,都是实现增删改查,连接多个数据库,实现多个用户的操作。JDBC.Toolspackageutil;im......
  • Idea基于Gradle构建SpringBoot3.0集成MP项目
    发生缘由学习Idea基于Gradle构建SpringBoot3.0集成MP项目运行环境电脑系统:win10jdk:17.0.6JVM:JavaHotSpot(TM)64-BitServerVM(build17.0.6+9-LTS-190,mixed......
  • 2023.02.02
    orzpsj,orzpborjcsy可惜这一天我在复习考试没看直播。参考psj的apio讲课,《决策单调性与四边形不等式》p_b_p_b的学习笔记。csy的讲课oiwikislopetrick决......
  • 5.2.5_定点数的移位运算
    @目录一、引子二、原码的算数移位(1)十进制(2)二进制1.算术右移2.算术左移三、定点小数四、反码的算数移位五、补码的算数移位六、算数移位总结七、案例(1)算数移位(2)逻辑移位八、......
  • 2023.02.02 闲话
    有密码。警示:模拟退火排列转移一般是交换随机位置,并不是相邻位置。本地开编译要C++14,否则可能导致std::uniform_real_distribution(l,r)(rng)之类不能通过C++14......
  • 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)----续(一)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 前端知识学习案例4-tailWind Css+vite2.0-添加Vue3.0
    vite2.0变成vite3.0   挂载vue组件  ......