首页 > 数据库 >IoT 场景下 TDengine 与老牌时序数据库怎么选?看看这份TSBS报告

IoT 场景下 TDengine 与老牌时序数据库怎么选?看看这份TSBS报告

时间:2023-07-14 16:32:40浏览次数:38  
标签:场景 TDengine IoT 写入 InfluxDB TimescaleDB TSBS CPU

上周一,TDengine 正式发布了 IoT 场景下基于 TSBS 的时序数据库(Time Series Database,TSDB)性能基准测试报告。该报告模拟虚拟货运公司车队中一组卡车的时序数据,预设了五种卡车规模场景,在相同的 AWS 云环境下运行了 TDengine 3.0、TimescaleDB 2.10.1 和 InfluxDB 1.8.10,从四大维度进行对比测试并输出结果。

为了便于大家更好地阅读和理解,基于本报告内容,我们将从写入、查询及测试过程如何复现等几大维度输出系列文章。本篇文章将为大家解读三大时序数据库在写入性能上的差异点。在上一篇文章《IoT 场景 TSBS 测试报告结果一键检验,测试脚本是______》中,我们对测试场景和基本配置已经进行了详细介绍,本篇文章便不再赘述,还没有了解过的小伙伴可以点击上文链接查看。

一、不同场景下写入性能对比 0706.1.png ::: hljs-center

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

:::

从上图中我们可以看到,在全部五个场景中,TDengine 的写入性能全面超越 TimescaleDB 和 InfluxDB。在场景二中 TDengine 写入性能最大达到 TimescaleDB 的 3.3 倍,在差距最小的场景五中,也达到了 TimescaleDB 的 1.04 倍。相比 InfluxDB,TDengine 在场景五中写入性能是 InfluxDB 的 16 倍,在差距最小的场景三中也有 1.8 倍。

此外,我们还注意到,随着设备数规模的增加,所有系统写入基本上呈现下降趋势。TimescaleDB 在小规模数据情况下写入性能不及 InfluxDB,但是随着设备数量的增加,其写入性能超过了 InfluxDB,这点上与[TimescaleDB vs. InfluxDB]对比报告中的结论一致。

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/ 0706.2.png 在三个系统数据完全落盘后,我们针对三个系统在不同场景下的磁盘空间占用进行了比较。0706.3.png ::: hljs-center

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

:::

从上图可以看到,TimescaleDB 在所有的场景下数据规模均显著地大于 InfluxDB 和 TDengine,并且这种差距随着数据规模增加快速变大。其中,TimescaleDB 在场景四和场景五中占用磁盘空间超过了 TDengine 的 11 倍。在前面三个场景中,InfluxDB 落盘后数据文件规模与 TDengine 比较接近;但是在场景四/五两个场景中,InfluxDB 落盘后文件占用的磁盘空间是 TDengine 的 2 倍以上。

测试过程中还有个小插曲,下表反应了 TimescaleDB 的压缩比率,可以看到,TimescaleDB 在小数据规模的情况下,压缩比正常,但是在数据规模较大的场景四和场景五中,压缩以后的磁盘空间占用比例反而增大了 3.4 倍左右,疑似 bug。 0706.4.png 二、写入过程资源消耗对比 仅凭数据写入速度,并不能全面地反映出三个系统在不同场景下数据写入的整体表现。为此我们以 1,000,000 devices × 10 metrics(场景四)为数据模板,检查数据写入过程中的服务器和客户端(包括客户端与服务器)的整体负载状况,并以此来对比三个系统在写入过程中服务器/客户端节点的资源占用情况。这里的资源占用主要包括服务器端的 CPU 开销/磁盘 IO 开销和客户端 CPU 开销。

1、服务端 CPU 开销

下图展示了在场景四写入过程中服务器端 CPU 负载状况。可以看到,三个系统在返回给客户端写入完成消息以后,都还继续使用服务器的资源进行相应的处理工作,这点上,TimescaleDB 尤为明显。TimescaleDB 在 7x 秒时即反馈客户端写入完成,但是其服务器端仍然调用 CPU 资源进行了数据压缩和整理工作,当然整个工作带来的 CPU 负载相对而言并不高,只有其峰值 CPU 开销的一半左右,但是其持续时间相当长,接近净写入时间的 4 倍。 0706.5.png

::: hljs-center

写入过程中服务器 CPU 开销

:::

InfluxDB 则使用了相当多的 CPU 资源,瞬时峰值甚至使用了全部的 CPU 资源,其写入负载较高,并且持续时间比 TimescaleDB 更长,当然更远长于 TDengine。三个系统对比,TDengine 对服务器的 CPU 需求最小,峰值也仅使用了 17% 左右的服务器 CPU 资源。由此可见,TDengine 独特的数据模型不仅体现在时序数据写入性能上,同样也展现在整体的资源开销上。

2、磁盘 I/O 对比

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

写入过程中服务器 IO 开销

:::

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

3、客户端 CPU 开销 0706.7.png ::: hljs-center

写入过程中客户端 CPU 开销

:::

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

三、性能基准评估扩展部分 为了更全面地评估 TDengine 在默认参数下的写入性能,我们在下面的性能评估中对可能会影响写入性能的多个参数进行了调整,以便开展更全面的评估工作。

1、虚拟节点(vnodes)数量

我们调整数据库中虚拟节点数量(默认是 12)为 12、18、24,并衡量不同 vnode 数量情况下 TDengine 写入性能。

0706.8.png 可以看到,在较多设备的场景(场景四、五)中,增加 vnodes 的数量 ,TDengine 写入性能提升明显。可见在不同规模的场景中,我们可以通过调整 TDengine 虚拟节点的数量来获得更好的写入性能。

2、设备记录数量

TDengine 创新设计了“一个设备一张表”的数据模型,需要在数据写入时创建表,建表操作对每个设备只执行一次,但这也使得 TDengine 在数据写入的准备阶段耗时较多。当单个表中数据量增加以后,数据准备(建表)的开销被分摊到更多的数据写入整体开销中。

以场景四(1,000,000 devices × 10 metrics)为例,单个设备的数据量仅有 18 条,当我们调整参数,将单个设备记录数据增加到 36、72、144 条时,整体写入时间更长,因此表现出来就是在建表开销被分摊到更多的数据写入过程中,建表的开销相对于数据写入的耗时占比越来越小,相应的整体写入速度也会越来越快。因此可以看到,TDengine 表现出了更加明显的写入优势。(这里每张表的记录数忽略了 IoT 场景中丢失的记录,所以单个设备记录数据这个值并非百分百准确)

0706.9.png ::: hljs-center

设备记录数增加时候数据写入性能对比(数值越大越好)

::: 我们调整 vnodes 数量配置,同时测试两个不同 vnodes 数量情况下的写入性能指标。如上图所示,随着表中记录数的增加,vgroups=12 和 vgroups=24,TDengine 写入性能均呈现出持续增加的趋势。当设备记录数达到 576 行(此时数据集规模约等于 32,414,619 x 32 = 10.37 亿行数据记录),vgroups=12 时,写入性能达到 2,827,696.64 metrics/sec,性能均大幅领先 TimescaleDB 与 InfluxDB,是 TimescaleDB 的 6.1 倍, InfluxDB 的 4.6 倍。

TimescaleDB 写入性能在单表记录数量大于 72 行以后出现了快速衰减。InfluxDB 在单设备记录增加过程中,写入性能有衰减,但衰减趋势非常缓慢。 四、写在最后 由此可见,在全部的场景中,TDengine 的写入性能超过 TimescaleDB 和 InfluxDB。在整个写入过程中,TDengine 除了提供更高的写入能力,在服务器的 CPU 和 IO 上,也均远优于 TimescaleDB 和 InfluxDB——不管是服务器的磁盘 IO 开销抑或客户端的开销,TDengine 均远小于 TimescaleDB 和 InfluxDB。

在后面的拓展部分,通过调整不同的数据库参数(vgroups),以及设置不同的数据规模(增加每个设备包含记录数)方式,我们在更多的方面评估了 TDengine 在 TSBS 基准数据集上的写入性能。通过这一系列深入的对比可以看到,针对更大规模(设备数量和每个设备记录数量)数据集,TDengine 可以通过简单调整虚拟节点数量的方式,获得更高的写入性能,并且 TDengine 在针对大数据集写入场景下展现出更好的性能优势,同时具有远低于 TimescaleDB 和 InfluxDB 对服务端资源(服务器 CPU 和磁盘 IO、内存等)的开销。

在《中移物联车联网项目,在 TDengine 3.0 的应用》一文中,TDengine 3.0 高效的写入性能也在企业实践中得到了验证——从 2.0 到 3.0,面对 1.2-1.3w 行/s 的业务写入峰值,以及 20w 行/s 的数据迁移巨大写入量,TDengine 都可以轻松应对,磁盘占用量约占 MySQL 的 1/7。如果你也面临着数据处理难题或想要进行数据架构升级,欢迎添加小T vx:tdengine1,加入 TDengine 用户交流群,和更多志同道合的开发者一起攻克难关。

标签:场景,TDengine,IoT,写入,InfluxDB,TimescaleDB,TSBS,CPU
From: https://blog.51cto.com/tdengine/6722973

相关文章

  • 【物联网】物联网时代25大开源IoT框架(二)
    00.目录@目录00.目录01.No.13Oracle02.No.14SAP03.No.15MicrosoftAzure04.No.16GoogleCloudPlatform05.No.17IBMWatson06.No.18HewlettPackardEnterprise07.No.19DataVbyBsquare08.No.20MindspherebySiemens09.No.21AylaNetwork10.No.22MBEDIo......
  • IPQ5018 SoC with QCN9074 VS QCN6122|IIOT Wifi6 solution|Wallys
    IPQ5018SoCwithQCN9074VSQCN6122|IIOTWifi6solution|WallysIntheeraofIndustry4.0,reliableandefficientwirelessconnectivityiscrucialforindustrialandenterpriseapplications. That'swhereWallyscomesinwithourcutting-edgeCost-Effe......
  • 使用MASA全家桶从零开始搭建IoT平台(六)使用规则引擎实现告警通知
    目录前言方案实施流程安装Node-RED配置一个告警处理流程编写代码测试总结前言数据的挑战:物联网的发展带来了海量的数据。这些数据来源多样,格式不一,处理起来十分复杂。同时,物联网中的设备数量庞大,需要设备间进行高效的协同和管理,这也对数据处理提出了更高的要求。如何从这些复......
  • IoT开发者为王,涂鸦智能硬核“靠边站”
    文|智能相对论作者|沈浪6月底,全球化IoT开发平台服务商涂鸦智能开了个TUYA开发者大会,面向行业传达了两个关键的信息点:1.当前IoT领域的行业竞争不再局限于技术、渠道的单一纬度,开始演化为整体的生态之争。2.紧随行业趋势,涂鸦智能发布PaaS2.0,基于“一个平台+四大开发服务”的核......
  • 如何用好强大的 TDengine 集群 ? 先了解 RAFT 在 3.0 中的应用
    大家都知道:由于单机数据库在数据规模、并发访问量等方面存在瓶颈,无法满足大规模应用的需求。因此才有了把数据切割分片,分布存储分布处理在多个节点上的数据库,也就是分布式数据库的由来。而为了实现数据库的高可用,又有了多副本的概念,副本之间的数据需要用特定算法保持一致,从而可以随......
  • IoTOS-v1.2.1接入J-IM(t-io)后台通知App
    IoTOS v1.2.1         一、登录页增加可修改轮播     登录页增加可修改数据轮播:首页轮播图由背景图片、标题、介绍、按钮一、按钮二(可配置跳转地址打开方式)组合而成  二、登录页增加常用运营商平台&关于-IoTOS链接    登录页增加国内常......
  • 蓝牙Mesh协议是一种专为广域物联网(IoT)应用设计的蓝牙通信协议。它允许多个设备之间建
    蓝牙Mesh协议是一种专为广域物联网(IoT)应用设计的蓝牙通信协议。它允许多个设备之间建立一个自组织的网络,形成一个能够覆盖较大范围的通信网络。蓝牙Mesh网络采用了网状拓扑结构,其中每个设备都可以与其他设备直接通信,从而实现设备之间的互连。这种网状结构有助于提供更广阔的覆盖......
  • TDengine 3.0.4.0 重要特性之 Python UDF 实战分享
    TDengine3.0.4.0发布了一个重要特性:支持用Python语言编写的自定义函数(UDF)。这个特性极大节省了UDF开发的时间成本。作为时序大数据处理平台,不支持PythonUDF显然是不完整的。UDF在实现自己业务中特有的逻辑时非常有用,比如量化交易场景计算自研的交易信号。本文内容由浅......
  • 如何用 TDengine 预测 “未来”
    介绍TDengine™是一种开源的云原生时序数据库(TimeSeriesDatabase,TSDB),专为物联网(IoT)、连接汽车和工业物联网进行了优化。它能够高效地实时摄取、处理和监控一天内由数十亿个传感器和数据收集器产生的PB级别的数据。 许多用户将由物联网设备、汽车或IT基础设施生成的海量......
  • 时序数据库 TDengine 与 DBeaver 达成合作,生态系统再壮大
    众所周知,DBeaver是一个流行的开源数据库管理和SQL客户端工具,为管理和使用各种类型的数据库(包括多个时序数据库)提供强大而灵活的平台。为了让大家在应用上更加便捷,我们与DBeaver达成合作,新发布的DBeaver23.1.1版本正式支持时序数据库(TimeSeriesDatabase)TDengine和全托......