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

news2024/11/24 19:56:09

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

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

一、不同场景下写入性能对比

不同场景下写入性能的对比(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/

在三个系统数据完全落盘后,我们针对三个系统在不同场景下的磁盘空间占用进行了比较

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

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

测试过程中还有个小插曲,下表反应了 TimescaleDB 的压缩比率,可以看到,TimescaleDB 在小数据规模的情况下,压缩比正常,但是在数据规模较大的场景四和场景五中,压缩以后的磁盘空间占用比例反而增大了 3.4 倍左右,疑似 bug。

二、写入过程资源消耗对比

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

1、服务端 CPU 开销

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

写入过程中服务器 CPU 开销

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

2、磁盘 I/O 对比

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

写入过程中服务器 IO 开销

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

3、客户端 CPU 开销

写入过程中客户端 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 写入性能。

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

2、设备记录数量

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

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

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

我们调整 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 用户交流群,和更多志同道合的开发者一起攻克难关。

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

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

相关文章

[Lesson 01] TiDB数据库架构概述

目录 一 章节目标 二 TiDB 体系结构 1 TiDB Server 2.1 TiKV 2.2 TiFlash 3 PD 参考 一 章节目标 理解TiDB数据库整体架构了解TiDB Server TiKV tiFlash 和 PD的主要功能 二 TiDB 体系结构 了解这些体系结构是如何实现TiDB的核心功能的 1 TiDB Server TiDB Serve…

记录--你知道Vue中的Scoped css原理么?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 追忆Scoped 偶然想起了一次面试,二面整体都聊完了,该做的算法题都做出来了,该背的八股文也背的差不多了,面试官频频点头,似乎对我的基础和项…

云计算的学习(四)

四、云计算中的存储基础知识 1.云计算虚拟化中的存储架构 ①虚拟化存储 在虚拟化存储架构中,最底层为物理磁盘。 底层的硬件组成存储池,存储池分为NAS存储和SAN存储;NAS存储需要文件系统;SAN存储需要对存储池进行逻辑划分产生逻…

【VSCode | 使用技巧集锦】中文插件突然失效、配置单个工程(工作区)编码

目录 ✨技巧一:中文插件失效的解决办法✨技巧二:配置单个工程(工作区)编码 ✨技巧一:中文插件失效的解决办法 问题描述:VSCode之前安装了中文插件,可以正常汉化,用了一段时间都没问题,今天打开v…

springboot+webscoket通信功能

1. 背景 项目上需要对某个页面的设计功能(低代码)进行最简单的多人协同,有以下需求点: (1)第一个进入该设计页面的人给编辑权限,后进入的所有人给在线(可申请编辑)权限 …

使用MQTTX和前端vue进行通讯

需求:根据后端给的接口,前端实现消息订阅和消息加密连接操作,不走后端直接和硬件设备进行操作 1.下载mqttx 官网链接:MQTTX: Your All-in-one MQTT Client Toolbox 根据自己电脑选择不同的操作系统,默认下载后是英文…

金鸣表格识别中何时应勾选“手写”选项?

在金鸣表格文字识别系统的表格识别模块中,有个“手写”的复选框可供用户选择性使用。这里的“手写”是手写识别的简称,设置此项的目的是为了让用户更准确地识别手写的表格图片中的文字。为何要单独设置这个选项而不是由程序全自动地进行处理呢&#xff1…

【GitOps系列】K8s极简实战

文章目录 示例应用介绍部署应用到k8s 如何使用命名空间隔离团队及应用环境?如何为业务选择最适合的工作负载类型?如何解决服务发现问题?如何迁移应用配置?如何将集群的业务服务暴露外网访问?如何保障业务资源需求和自动…

JavaWeb(3)——HTML、CSS、JS 快速入门

一、JavaScript 运算符 • 赋值运算符( ) 赋值运算符执行过程? 将等号右边的值赋予给左边, 要求左边必须是一个容器 出现是为了简化代码, 比如让 let age 18 ,age 加 2 怎么写呢 let age 18age 2console.log(age)age * 2con…

html+JavaScript实现一个好看的颜色码查询器,支持查询、转换、颜色选择器和颜色码对照表

前言 相信大家平时工作的时候应该会经常用到颜色码吧,比如说想找个好看的颜色,或者有个颜色码但是不知道这个码是什么颜色的,这个时候我们就可以用颜色码对照表或者颜色码查询来查看了。 当然也可以用截图软件或者取色器或者PS来查看&#…

如何有效检测、识别和管理 Terraform 配置漂移?

作者|Krishnadutt Panchagnula 翻译|Seal软件 链接|https://betterprogramming.pub/detecting-identifying-and-managing-terraform-state-drift-997366a74537 在理想的 IaC 世界中,我们所有的基础设施实现和更新都是通过将更新的…

【高并发】高并发架构实战:从需求分析到系统设计

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 很多软件工程师的职业规划是成为架构师,但是要成为架构师很多时候要求先有架构设计经验,而不做架构师又怎么会有架构设计经验呢?那么要如何获得架构设…

Cesium 测距、测面功能实现

参考博主 功能代码参考 新需求:点击测距,此时画线逻辑已生成到运行缓存中,如果 用户误触测距,想撤销,如何操作? 代码: // 重置画图resetDraw(){// 清除可能会用到的监听事件if (this.handle…

操作系统17:外存组织方式和文件存储管理

目录 1、外存的组织方式 (1)连续组织方式 (2)链接组织方式 2.1 - 隐式链接 2.2 - 显式链接 (3)索引组织方式 3.1 - 单级索引组织方式 3.2 - 多级索引组织方式 3.3 - 增量式索引组织方式 2、文件存…

【操作系统】几种基本页面置换算法的基本思想和流程图

目录 一、概述二、最佳置换算法(OPT)三、先进先出置换算法(FIFO)四、最近最久未使用置换算法(LRU)五、三种页面置换算法优缺点对比六、运行结果七、总结 一、概述 在地址映射过程中,若在页面中发…

Linux 发行版 Gentoo 存在重大漏洞

导读网络安全公司 SonarSource 在日前研究中发现,Gentoo Linux 发行版中存在漏洞 CVE-2023-28424,黑客可以利用该漏洞进行 SQL 注入攻击。 研究人员从 GentooLinux 的 Soko 搜索组件中找到了这个漏洞。该漏洞的 CVSS 风险评分为 9.1,属于特别…

6款开源中文OCR使用介绍(亲测效果)

文章目录 前言开源ocr项目1. Paddle OCR(推荐指数:★★★★★)1.1 简介1.2 使用1.3 优缺点 2. CnOCR(推荐指数:★★★★★)2.1 简介2.2 使用2.3 优缺点 3. chinese_lite OCR(推荐指数&#xff1…

保障AI时代的图像安全:揭示解决虚假图片危机的三种策略

写在前面从 P 图到假图批量生成,AI 图像安全成可信 AI 重点关注方向三大技术:提前布局,合合信息 AI 图像安全技术助力行业健康发展✔ AI 图像篡改检测技术✔ 生成式图像鉴别技术✔ OCR 对抗攻击技术 一项标准:与中国信通院等权威机…

在本机搭建自己的ftp服务器--最简单的方法(详细教程)

在本机搭建自己的ftp服务器–最简单的方法 FTP服务器可以在局域网中快速传输文件,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议…

vue-next-admin跨域配置

vue-next-admin,这是基于 vue3.x CompositionAPI typescript vite element plus vue-router-next next.vuex,适配手机、平板、pc 的后台开源免费模板库 这是个开源免费的后台管理系统,从v2到v3,变化比较大,但是…