首页 > 其他分享 >InfluxDB vs TDengine,用数据“说”性能

InfluxDB vs TDengine,用数据“说”性能

时间:2023-04-18 11:48:40浏览次数:127  
标签:场景 TDengine 写入 InfluxDB 查询 vs CPU

为了验证 TDengine 3.0 的性能,我们使用第三方基准性能测试平台 TSBS(Time Series Benchmark Suite) 中针对 DevOps 的 cpu-only 五个场景作为基础数据集,在相同的 AWS 云环境下对 TDengine 3.0 和 InfluxDB 1.8(该版本是 InfluxDB 能够运行 TSBS 框架的最新版本) 进行了对比分析。在本篇文章中,我们将从写入、存储、查询、及资源开销等几大维度对测试结果进行汇总分析,给到大家参考。

我们采用下方 TimescaleDB vs. InfluxDB 对比报告中推荐的方式配置 InfluxDB,将缓冲区配置为 80G,以便 1000W 设备写入时能够顺利进行,同时开启 Time Series Index(TSI)。配置系统在系统插入数据完成 30s 后开始数据压缩。

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/

关于系统的配置详情、如何一键复现测试结果及详细的测试数据介绍等内容,大家可参考《一键获取测试脚本,轻松验证“TSBS 时序数据库性能基准测试报告”》《TSBS 是什么?为什么时序数据库 TDengine 会选择它作为性能对比测试平台?》两篇文章,本文便不再赘述。

写入性能最高达到 InfluxDB 的 10.6 倍

总体而言,在 TSBS 报告全部的 cpu-only 五个场景中,时序数据库Time Series DatabaseTDengine 写入性能均优于 InfluxDB。相比 InfluxDB,TDengine 写入速度最领先的场景是其 10.6 倍(场景五),最少也是 3.0 倍(场景一)。此外,TDengine 在写入过程中消耗了最少 CPU 资源和磁盘 IO 开销。下面看一下具体分析:

不同场景下写入性能对比

TDengine Database 不同场景下写入性能的对比(metrics/sec. 数值越大越好)

从上图可以看到,在全部五个场景中,TDengine 的写入性能全面超越 InfluxDB。TDengine 在场景五中写入性能是 InfluxDB 的 10.63 倍,在差距最小的场景一中也有 3.01 倍。

写入过程资源消耗对比

数据写入速度并不能够全面的反映 TDengine 和 InfluxDB 在不同场景下数据写入的整体表现。为此我们以 1,000,000 devices × 10 metrics (场景四)为例,检查数据写入过程中的服务器和客户端(包括客户端与服务器)的整体负载状况,并以此来对比 TDengine 和 InfluxDB 在写入过程中服务器/客户端节点的资源占用情况,这里的资源占用主要包括服务器端的 CPU 开销/磁盘 IO 开销和客户端 CPU 开销。

服务端 CPU 开销

下图展示了两大数据库在场景四写入过程中服务器端 CPU 负载状况。可以看到,TDengine 和 InfluxDB 在返回给客户端写入完成消息以后,都还继续使用服务器的资源进行相应的处理工作,InfluxDB 使用了相当多的 CPU 资源,瞬时峰值甚至使用了全部的 CPU 资源,其写入负载较高,并且其持续时间远长于 TDengine。两个系统对比,TDengine 对服务器的 CPU 需求最小,峰值也仅使用了 17% 左右的服务器 CPU 资源。由此可见,TDengine 独特的数据模型对于时序数据写入不仅在性能上,在整体的资源开销上也具有非常大的优势。

TDengine Database 写入过程中服务器 CPU 开销

磁盘 I/O 对比

下图展示了 1,000,000 devices × 10 metrics (场景四)数据写入过程中两大数据库在服务器端磁盘的写入状态。可以看到,结合着服务器端 CPU 开销表现,其 IO 动作与 CPU 呈现同步的活跃状态。

TDengine Database 写入过程中服务器 IO 开销

在写入相同规模的数据集情况下,TDengine 在写入过程中对于磁盘写入能力的占用远小于 InfluxDB,写入过程只占用了部分磁盘写入能力(125MiB/Sec. 3000IOPS)。从上图能看到,对于两大数据库,数据写入过程中磁盘的 IO 瓶颈都是确实存在的。但 InfluxDB 长时间消耗完全部的磁盘写入能力,远远超过了 TDengine 对磁盘写入能力的需求。

客户端 CPU 开销

写入过程中客户端 CPU 开销

从上图可以看到,客户端上 TDengine 对 CPU 的需求是大于 InfluxDB 的。整体来说,在整个写入过程中,InfluxDB 客户端负载计算资源占用较低,对客户端压力小,这是因为其写入的压力基本上完全集中在服务端,但这种模式很容易导致服务端成为瓶颈。而 TDengine 在客户端的开销最大,峰值瞬间达到了 56%,然后快速回落。综合服务器与客户端的资源开销来看,TDengine 写入持续时间更短,在系统整体 CPU 开销上 TDengine 仍然具有相当大的优势。

查询性能最高达到 InfluxDB 的 37 倍

在查询性能的评估上,我们使用场景一和场景二作为基准数据集。为了让 InfluxDB 发挥出更好的查询性能,我们开启 InfluxDB 的 TSI (time series index)。在整个查询对比中,TDengine 数据库的虚拟节点数量(vnodes)保持为默认的 6 个,其他的数据库参数配置为默认值。

总体来说,查询方面,在场景一(只包含 4 天的数据)与场景二的 15 个不同类型的查询中,TDengine 的查询平均响应时间是全面优于 InfluxDB 的,而且在复杂查询上优势更为明显,同时具有最小的计算资源开销。相比 InfluxDB,场景一中 TDengine 查询性能是其 1.9 ~ 37.0 倍,场景二中 TDengine 查询性能是其 1.8 ~ 34.2 倍。

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

由于部分类型(分类标准参见 TimescaleDB vs. InfluxDB 对比报告)单次查询响应时间非常短,为了更加准确地测量每个查询场景的较为稳定的响应时间,我们将单个查询运行次数提升到 5,000 次,然后使用 TSBS 自动统计并输出结果,最后结果是 5,000 次查询的算数平均值,使用并发客户端 Workers 数量为 8。首先我们提供场景二(4,000 设备)的查询性能对比结果:

TDengine Database

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

TDengine Database 4000 devices × 10 metrics Simple Rollups 查询响应时间 (数值越小越好)

由于 Simple Rollups 的整体查询响应时间非常短,制约查询响应时间主体因素并不是查询涉及的数据规模,即这种类型查询的瓶颈并不是数据规模。但是 TDengine 仍然在所有类型的查询响应时间上优于 InfluxDB,具体的数值比较请参见上表中的详细数据表格。

TDengine Database 4000 devices × 10 metrics Aggregates 查询响应时间 (数值越小越好)

在 Aggregates 类型的查询中,我们看到 TDengine 查询性能相比于 InfluxDB 有较大优势,TDengine cpu-max-all-8 类型的查询性能是 InfluxDB 的 7 倍。

TDengine Database 4000 devices × 10 metrics Double rollups 查询响应时间 (数值越小越好)

在 Double-rollups 类型查询中, TDengine 同样展现出巨大的性能优势,以查询响应时间来度量,在 double-groupby-5 查询上 TDengine 是 InfluxDB 的 26 倍,double-groupby-all 上是其 34 倍。

TDengine Database 4000 devices × 10 metrics Thresholds 查询 high-cpu-1 响应时间 (数值越小越好) TDengine Database 4000 devices × 10 metrics Thresholds 查询 high-cpu-all 响应时间 (数值越小越好)

上面两图是 threshold 类型的查询对比,TDengine 的查询响应时间均显著低于 InfluxDB。在 high-cpu-all 类型的查询上,TDengine 的性能是 InfluxDB 的 15 倍。

TDengine Database 4000 devices × 10 metrics Complex queries 查询响应时间 (数值越小越好)

对于 Complex-queries 类型的查询,TDengine 两个查询均大幅领先 InfluxDB。在 lastpoint 查询中,查询性能是 InfluxDB 的 21倍;在 groupby-orderby-limit 场景中查询性能是 InfluxDB 的 15 倍。

资源开销对比

由于部分查询持续时间特别短,因此我们并不能完整地看到查询过程中服务器的 IO/CPU/网络情况。为此我们针对场景二以 Double rollups 类别中的 double-groupby-5 查询为例,执行 1,000 次查询,记录 TDengine 和 InfluxDB 在查询执行的整个过程中服务器 CPU、内存、网络的开销并进行对比。

TDengine Database 查询过程中服务器 CPU 开销

从上图可以看到,TDengine 和 InfluxDB 在整个查询过程中 CPU 的使用均较为平稳。TDengine 在查询过程中整体 CPU 占用约 80%,使用的 CPU 资源较高,InfluxDB 稳定的 CPU 占用较小,约 27 %(但是有较多的瞬时冲高)。从整体 CPU 开销上来看,虽然 InfluxDB 瞬时 CPU 开销大部分是较低的,但是其完成查询持续时间最长,所以整体 CPU 资源消耗最多。由于 TDengine 完成全部查询的时间仅是 InfluxDB 的 1/20,虽然 CPU 稳定值是 InfluxDB 的 2 倍多,但整体的 CPU 计算时间消耗只有其 1/10 。

服务器内存状况

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

如上图所示,在整个查询过程中,TDengine 与 InfluxDB 的内存均维持在一个相对平稳的状态。

服务器网络带宽

TDengine Database 查询过程中网络占用情况

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

3,100 devices × 10 metrics 查询性能对比

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

TDengine Database

如上表所示,在更小规模的数据集(100设备)上的查询对比可以看到,整体上 TDengine 同样展现出极好的性能,在全部的查询语句中全面优于 InfluxDB,部分查询性能超过 InfluxDB 37 倍。

InfluxDB 占用的磁盘空间最高达到 TDengine 的 4.5 倍

在前面三个场景中,InfluxDB 落盘后数据文件规模与 TDengine 非常接近,但是在大数据规模的场景四和场景五中,InfluxDB 落盘后文件占用的磁盘空间显著超过了 TDengine。下图比较了 TDengine 和 InfluxDB 在不同场景下的磁盘空间占用情况:

TDengine Database 磁盘空间占用(数值越小越优)

从上图可以看到,在前面三个场景中,InfluxDB 落盘后数据文件规模与 TDengine 非常接近(在场景二中,TDengine 的数据落盘规模比 InfluxDB 大了 1%)。但是在场景四和场景五中,InfluxDB 落盘后文件占用的磁盘空间分别是 TDengine 的 4.2 倍和 4.5 倍。

写在最后

基于本次测试报告,我们可以得出结论,在全部的数据场景中,TDengine 写入性能、查询性能均全面超过 InfluxDB。在整个写入过程中,TDengine 在提供更高写入和查询能力的前提下,不论是服务器的 CPU 还是 IO,TDengine 均优于 InfluxDB。即使加上客户端的开销统计,TDengine 在写入开销上也在 InfluxDB 之下。

从实践角度出发,这个报告结果也很好地说明了为什么有很多企业客户在 InfluxDB 和 TDengine 的选型调研中选择了 TDengine,双汇便是其中之一,在《双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine》这篇文章中,便阐述了其选型调研过程的具体思考。

为了方便大家验证测试结果,本测试报告支持运行测试脚本一键复现,欢迎大家在评论区互动交流。同时,你也可以添加 小T vx:tdengine1,加入 TDengine 用户交流群,和更多志同道合的开发者一起探讨数据处理难题。

标签:场景,TDengine,写入,InfluxDB,查询,vs,CPU
From: https://www.cnblogs.com/taosdata/p/17329016.html

相关文章

  • VsCode常用设置(新手必备!)
    很多同学会有疑问,为什么我看到很多大牛的视频里面敲代码的时候,输入一个template,就会出现一大块代码。为什么我输入一个template,只有这一个单词,啥也没出来别墨迹,快解决闲话不多说,我们就来聊一聊如何--懒省事(在VsCode里面设置自定义的模板)首先:我们要找到这个模板设置的入口在文件->......
  • 低代码开发重要工具:私有化部署的jvs-logic的设计与价值
    逻辑引擎介绍逻辑引擎是一种能够处理逻辑表达式的程序,它能够根据用户输入的表达式计算出表达式的值。在实际应用中,逻辑引擎通常被用于处理规则引擎、决策系统、业务规则配置等领域,具有广泛的应用前景。逻辑引擎如下图所示,在业务系统中存在各种的业务触发的动作,例如提交一个申请、回......
  • VS Code 有哪些好用的插件呢?【持续更新】
    一、画图工具:vscode-drawio  功能:在VSCode中画流程图、数据流图等等。      使用方法:    创建一个后缀名为.drawio的文件,然后用VSCode打开即可。  效果如下图:  二、格式化工具:PrettyFormatter  功能:格式化文档,包括js、json、html、css、xml等......
  • VS2019常用快捷键
    注释CTRL+KCTRL+C取消注释CTRL+KCTRL+UHOME将光标移动至代码行开头END 将光标移动至代码行结尾DELETE删除按住SHIFT后将光标点击到指定位置可快速选取大段代码INSERT切换插⼊模式或覆盖模式F5调试CTRL+F5执行不调试......
  • JVM vs JDK vs JRE
    JVM(JavaVirtueMachine)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,随处可以运行”的关键所在。JVM并不是只有一种!只要满足JVM规范,每......
  • vSphere Web Client 添加主机进VSAN集群时报错“SAN 主机移至目标群集: vSAN 群集的 U
    案例描述vSphereWebClient添加主机进VSAN集群时,报“无法将vSAN主机移至目标群集:vSAN群集的UUID不匹配(主机:5223a6c9-cf94-f978-1abb-9906506626be,目标:523ae663-623b-e2fc-39e3-43b15c5ca801)。”错误。原因分析是因为该esxi主机已经加入过其它集群,和现在新加......
  • 【Database开发】国产数据库之涛思TDengine(开发入门)
    1、简介TDengine是一款开源、云原生的时序数据库,专为物联网、工业互联网、金融、IT运维监控等场景设计并优化。它能让大量设备、数据采集器每天产生的高达TB甚至PB级的数据得到高效实时的处理,对业务的运行状态进行实时的监测、预警,从大数据中挖掘出商业价值。2、开发指南......
  • VSCodeSettings备份
    {"workbench.colorTheme":"Monokai","code-runner.runInTerminal":true,"code-runner.executorMap":{"javascript":"node","php":"C:\\php\\php.exe&......
  • vs 2010项目转成 2008
    *.csproj*.resx*.sln把11.0改成10.0版本把4.0改成3.5去掉app.config中的.NET版本,就可以不生成*..exe.config中的必需版本信息直接在项目中去掉app.config就不会生成配置文件了删除*..exe.config文件中的.NET版本配置......
  • 【Spring MVC + Tomcat】Spring MVC 传统VS现代方式的启动过程对比
    1 前言这节我们来讨论下SpringMVC传统和现在的启动方式的不同,可能大家现在上手就是SpringBoot直接给我们内置Tomcat,我们最多也就是改改配置就完事了,我记得我上学的时候写SSM的时候,还要整理各种Jar包和配置,这节我们就来对比下两种启动方式是如何启动SpringMVC的哈。2  传......