TDengine 的查询性能与老牌时序数据库相比如何?来看看

news2024/11/24 19:10:18

在上一篇文章《IoT 场景下写入性能:TDengine=16.2 x InfluxDB》中,我们基于 IoT 场景下的 TSBS 时序数据库(Time Series Database)性能基准测试报告对三大数据库写入性能进行了相关解读,较为直观地展现出了 TDengine 的众多写入优势。本篇文章将以查询性能作为主题,给 IoT 场景下正在为数据分析痛点而头疼的朋友们带来一些帮助。

在查询性能评估部分,我们使用场景一(只包含4天数据,这个修改与[TimescaleDB vs. InfluxDB]中要求一致)和场景二作为基准数据集,具体基础数据集的特点,请参照《IoT 场景 TSBS 测试报告结果一键检验,测试脚本是______

在查询性能评估之前,为确保两大数据库充分发挥查询性能,对于 TimescaleDB,我们采用[TimescaleDB vs. InfluxDB]中的推荐配置,设置为 8 个 Chunk ,以确保其充分发挥查询性能;对于 lInfluxDB,我们开启 InfluxDB 的 TSI (time series index)。在整个查询对比中,TDengine 数据库的虚拟节点数量(vnodes)保持为默认的 6 个(scale=100 时配置 1 个),其他的数据库参数配置为默认值。

TimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data:https://www.timescale.com/blog/TimescaleDB-vs-influxdb-for-time-series-data-timescale-influx-sql-nosql-36489299877/

4,000 devices × 10 metrics 查询性能对比

由于大部分类型单次查询响应时间过长,为了更加准确地测量每个查询场景下较为稳定的响应时间,我们依据卡车数量规模,将单个查询运行次数分别提升到 2,000 次(场景一)和 500 次(场景二),然后使用 TSBS 自动统计并输出结果,最后结果是多次查询的算数平均值,使用并发客户端 Workers 数量为 4。下表是场景二 (4,000 设备)的查询性能对比结果。

查询类型TDengineInfluxDBInfluxDB/TDengineTimescaleDBTimescaleDB/TDengine
last-loc11.52562.864885.94%11.77102.17%
low-fuel30.726352067.06%416.751356.61%
high-load10.74861.138017.97%11.62108.19%
stationary-trucks23.93156.6513207.74%195.46817.82%
long-driving-sessions59.44374.98630.85%2938.544943.71%
long-daily-sessions218.971439.19657.25%19080.958713.96%
avg-vs-projected-fuel-consumption3111.1840842.051312.75%37127.241193.35%
avg-daily-driving-duration4402.1543588.02990.15%73781.971676.04%
avg-daily-driving-session4034.0984494.792094.52%80765.042002.06%
avg-load1295.97552493.7842631.68%30452.262349.77%
daily-activity2314.6415248.66658.79%79242.143423.52%
breakdown-frequency5416.3288804.935332.14%70205.291296.19%

下面我们对每个查询结果做一定的分析说明:

:查询一=daily-activity;查询二=avg-daily-driving-session;查询三=avg-daily-driving-duration;查询四=avg-vs-projected-fuel-consumption

4000 devices 查询响应时间 (数值越小越好) 

 在分组选择的查询中,TDengine 采用一张表一个设备(卡车)的设计方式,并采用缓存模式的 last_row 函数来查询最新的数据。从结果上看,TDengine 的查询响应时间均优于 InfluxDB 和 TimescaleDB。

4000 devices Aggregates 查询响应时间 (数值越小越好)

在复杂分组聚合的查询中,我们看到 TDengine 查询性能相比于 TimescaleDB 和 InfluxDB 有非常大的优势;而在时间窗口聚合的查询过程中,针对规模较大的数据集,TimescaleDB 查询性能不佳——long-driving-sessions 和 long-daily-sessions 均表现很差。TDengine 在 stationary-trucks 查询性能是 InfluxDB 的 132 倍,是 TimescaleDB 的 8 倍;在 long-daily-sessions 中是 TimescaleDB 的 87 倍,是 InfluxDB 的 6.5 倍。

4000 devices Double rollups 查询响应时间 (数值越小越好)

4000 devices 查询响应时间 (数值越小越好)

在复杂的混合查询中, TDengine 展现出巨大的性能优势,按查询响应时间来度量,在 avg-load 和 breakdown-frequency 的查询中,TDengine 性能是 InfluxDB 的 426 倍和 53 倍 ;对比 TimescaleDB,在 daily-activity 查询中,TDengine 是其 34 倍,在 avg-load 查询中,TDengine 是其 23 倍。

资源开销对比

由于部分查询持续时间特别短,因此并不能完整地看到查询过程中服务器的 IO/CPU/网络情况。为此,我们针对场景二,以 daily-activity 查询为例,执行 50 次查询,记录三个软件系统在查询执行的整个过程中服务器 CPU、内存、网络的开销并进行对比。

服务器 CPU 开销

查询过程中服务器 CPU 开销

从上图可以看到,三个系统在整个查询过程中 CPU 的使用均较为平稳。TDengine 在查询过程中整体 CPU 占用约 为 70%,TimescaleDB 在查询过程中瞬时 CPU 最低,约为 22%,InfluxDB 的稳定阶段 CPU 占用最大,约 98 %(有较多的瞬时100%)。从整体 CPU 开销上来看,虽然 TimescaleDB 瞬时 CPU 开销最低,但是其完成查询持续时间最长,所以整体 CPU 资源消耗最多;InfluxDB 基本顶格 100% 使用全部 CPU,持续时间是 TDengine 的三倍,开销次之。TDengine 完成全部查询的时间仅是 TimescaleDB 的 1/30,整体 CPU 开销最低。

服务器内存状况

查询过程中服务器内存情况

如上图所示,在整个查询过程中,TDengine 内存维持了一个相对平稳的状态,平均使用约为 12GB;TimescaleDB 和 InfluxDB 内存占用在整个查询过程中均保持平稳,平均约为 10GB;其中 TimescaleDB 对 buffer 和 cache 使用比较多。

服务器网络带宽

查询过程中网络占用情况

上图展示了查询过程中三大系统服务器端上行和下行的网络带宽情况,负载状况基本上和 CPU 状况相似——TDengine 网络带宽开销最高,因为在最短的时间内就完成了全部查询,需要将查询结果返回给客户端;InfluxDB 和 TimescaleDB 网络带宽大致相同。

100 devices × 10 metrics 查询性能对比

对于场景一(100 devices x 10 metrics),TSBS 的 15 个查询对比结果如下:

查询类型TDengineInfluxDBInfluxDB/TDengineTimescaleDBTimescaleDB/TDengine
last-loc1.0314.941450.49%1.35131.07%
low-fuel4.6117.45378.52%6.74146.20%
high-load1.0318.331779.61%1.31127.18%
stationary-trucks3.5969.11924.79%4.02111.98%
long-driving-sessions5.413240.74%61.871145.74%
long-daily-sessions13.8842.91309.15%228.381645.39%
avg-vs-projected-fuel-consumption267.031033.72387.12%830.79311.12%
avg-daily-driving-duration278.62942.47338.26%1049.07376.52%
avg-daily-driving-session166.491707.271025.45%1066.69640.69%
avg-load102.3115956.7315596.45%487.39476.39%
daily-activity146.5510.3348.33%1245.05849.86%
breakdown-frequency413.826953.831680.40%955.2230.82%

如上表所示,从更小规模的数据集(场景一)上的查询对比可以看到,整体上 TDengine 同样展现出极好的性能,在全部的查询语句中全面优于 TimescaleDB 和 InfluxDB,部分查询性能超过 TimescaleDB 16 倍,超过 InfluxDB 155 倍

写在最后

基于上文可以做出总结,查询方面整体来讲,在场景一(只包含 4 天的数据)与场景二的 15 个不同类型的查询中,TDengine 的查询平均响应时间全面优于 InfluxDB 和 TimescaleDB,在复杂查询上优势更为明显,同时具有最小的计算资源开销。相对于 InfluxDB,场景一中 TDengine 查询性能是其 2.4 ~ 155.9 倍,场景二中 TDengine 查询性能是其 6.3 ~ 426.3 倍;相对于 TimescaleDB,场景一中 TDengine 查询性能是其 1.1 ~ 16.4 倍,场景二中 TDengine 查询性能是其 1.02 ~ 87 倍。

同样地,TDengine 3.0 高效的查询性能也在企业实践中得到了验证,在《老朋友,新版本:中移物联的 TDengine 3.0 全新体验》一文中可以看到,从 2.0 到 3.0,TDengine 读取数据性能依旧很突出,面对中移物联网场景最常用的单设备单日查询,3.0 可以在 0.1s 内返回结果。如果你也面临着数据处理难题或想要进行数据架构升级,欢迎添加小T vx:tdengine1,加入 TDengine 用户交流群,和更多志同道合的开发者一起攻克难关。

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

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

相关文章

springboot @Async 异步调用接口处理数据

Async 异步背景 新增的数据需要分发给下游业务系统,由于下游业务系统状态未知,所以需要异步发送数据给下游业务系统。 系统生效按钮--->controller新增-->异步调用servcie--->数据集成 在springboot框架中实现步骤 首先在启动类上加上Enable…

数据分析:扩展企业微信、钉钉、飞书等告警通知渠道

本章节主要讲述如何扩展告警的通知渠道,以便将告警发送到第三方应用中 企业微信 实现目标 ●在鸿鹄中创建的告警被触发后,将告警通知发送至指定的企业微信群聊 配置步骤 1、打开“企业微信”,点击告警群右上角的“...”按钮 2、点击“群机器人…

opencv双目视觉标定、匹配和测量

双目视觉原理方面参照《学习Opencv》和大牛博客 http://blog.csdn.net/chenyusiyuan/article/details/5970799中16-19系列博客。本文主要记录我自己在双目视觉标定,立体匹配,测量中遇到的问题和解决方法,并附有代码,文末有代码下载的地址,欢迎交流。 博主使用的相机是USB双…

Android P 之Zygote进程源码分析

init进程是用户空间的第一个进程,而zygote进程则是第一个java进程。zygote进程是init进程的子进程,init进程通过解析rc文件,运行了zygote进程。 zygote是Android系统中一个相当重要的进程,它的主要功能就是执行Android应用程序。…

python 安装、配置、使用 xlrd模块、numpy模块

目录 一、xlrd模块 (一)安装xlrd模块 (二) pycharm 配置xlrd (三) 读取xls格式 (四)xlrd读取时间日期时,会是float类型,需要转换。 二、numpy模块 (一)n…

Docker 安装 MongoDB开启认证,创建只读用户权限。

创建带认证的mongdb容器 docker run -itd --name mongo -p 27017:27017 mongo --auth --auth 就是开启mongodb权限认证。如果不加 --auth 则是无权限认证,连接成功后任何用户都可以对数据库进行读写操作。 进入容器并创建用户 docker run -itd --name mongo -p 27…

九州云参与编写的《电力行业边缘计算白皮书》正式发布

近日,由中国通信标准化协会算网融合产业及标准推进委员会(CCSA TC621)牵头组织的2023算网融合产业发展峰会在北京成功召开。 会上,由中国信息通信研究院牵头联合北京航空航天大学、 国网信息通信产业集团、中国电力科学研究院、九…

区块链-java学习和劝退

字面意思:按照区域划分,每个区域通过可信的账本进行结算,将各个区域链接,形成小中心,大整体的财务结算认证体系; 1、学习前准备 您最好掌握一定的财务基本知识; 2、学习步骤 1)区…

❤️创意网页:如何创建一个漂亮的3D正六边形

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

Windows系统如何查看物理cpu核数?

Step1:WinR 打开cmd; Step2:输入dxdiag后,回车; Step3:即可查看:

Word字间距怎么调整?2023最新方法总结!

“作为一个Word新手,里面的好多功能我都没有弄清楚。今天正好写了一篇文章,但不知道应该怎么调整字间距。有朋友知道Word字间距怎么调的吗?快教教我!” Word作为一个便捷的办公软件,让我们的工作更方便。学习好Word的使…

CentOS 安装字体 微软雅黑

fc-list命令查看已经安装的字体 fc-list :langzh命令可以查看已安装的中文字体 找到windows系统里面的字体 上传到服务器 /usr/share/fonts/winFonts 下,winFonts目录是自己建立的,名称无要求 如果C:\Windows\Fonts下的字体没法直接传输将这个文件夹复…

vulnhub靶场noob:1

靶机下载地址:Noob: 1 ~ VulnHub Arp发现主机 arp-scan -l 扫描端口 nmap --min-rate 10000 -p- 192.168.21.132 扫描端口的服务版本号以及操作系统 nmap -sV -sT -sC -O -p21,80 192.168.21.132 可以看到ftp里面有文件,web是php 扫描基础漏洞 nma…

12 从0开始学PyTorch| PyTorch全连接网络:建立区分鸟和飞机的模型

上一小节我们终于开始搭建神经网络了,只不过它很简单,并且对我们更早的时候做的温度计转换模型做了一次迭代,甚至连效果都没有太大的变化,这一小节我们开始处理一些有意思的事情:做一个图像分类的模型。 小图像数据集…

Flink数据流

文章目录 一.基本概念二.Flink和Spark三. Flink配置文件四. yarn部署flink4.1 session-cluster模式4.2 pre-job-cluster模式 五.Flink运行时架构5.1 任务提交流程5.2 如何实现并行计算5.3 并行任务需要占用多少slot5.4 一个流处理包含多少任务 一.基本概念 官网介绍 Apache F…

css 禁止多次点击导致的选中了目标div的文字

像下面这样的情况,就可以用这种方法避免掉 禁止多次点击,导致的,选中了目标div的文字 或者 禁止多次点击,导致,html结构被选中显示出来 .targetDiv {-webkit-user-select: none;-moz-user-select: none;-ms-user-sel…

Vue3卡片(Card)

可自定义设置以下属性: 卡片宽度(width),类型:number | string,默认 ‘auto’是否有边框(bordered),类型:boolean,默认 true卡片右上角的操作区域…

所有语言数据类型大汇总(持续更新)

一 c语言 参考 C语言-整数:short、int、long、long long(signed和unsigned)、原码、反码、补码_c语言signed是什么类型_Talent Q的博客-CSDN博客https://blog.csdn.net/qq_43177371/article/details/105703234 二 system verilog

服务器数据恢复-网站服务器宕机无法重启的数据恢复案例

服务器数据恢复环境: 一台linux操作系统网站服务器,该服务器上部署了几十个网站,服务器上只有一块SATA硬盘。 服务器故障&分析: 服务器正常运行中突然宕机,管理员尝试多次重新启动服务器失败,将服务器…

软件测试之测试用例设计方法

目录 1.基于需求设计测试用例 2.具体的测试用例设计方法 1.等价类 2.边界值法 3.判定表 1.基于需求设计测试用例 需求文档->梳理分析需求(掌握需求)->针对文档设计测试用例 在分析测试需求时,一般分为功能测试需求和非功能测试…