关于tdengine:时序数据库性能及应用大PKTDengine-值得期待

48次阅读

共计 2655 个字符,预计需要花费 7 分钟才能阅读完成。

时序数据库 (Time Series Database) 是用于存储和治理工夫序列数据的专业化数据库,具备写多读少、冷热明显、高并发写入、无事务要求、海量数据继续写入等特点,能够基于工夫区间聚合剖析和高效检索,广泛应用在物联网、经济金融、环境监控、工业制作、农业生产、硬件和软件系统监控等场景。

随着技术的一直倒退,时序数据库这个赛道里最近几年呈现了很多的佼佼者,明天就来将这些时序数据库从性能到利用一起梳理比照下。

1 TDengine vs InfluxDB 性能 PK

性能是用户在抉择和应用时序数据库时十分关注的一个点。

1.1 数据库介绍

InfluxDB

是一个用 Go 语言编写的开源时序数据库。其外围是一个自定义构建的存储引擎,它针对时序数据进行了优化,是目前最为风行的时序数据库之一。

TDengine

是一款集成了音讯队列,数据库,流式计算等性能的物联网大数据平台。该产品不依赖任何开源或第三方软件,领有齐全自主知识产权,具备高性能、高牢靠、可伸缩、零治理、简略易学等技术特点。TDengine 是以后时序数据库畛域中一匹势头正劲的黑马,在国产时序数据库中算是 No.1 了。

“一言不合上数据”,接下来,咱们正式进入测试环节。

1.2 环境筹备

为了不便大家复现,咱们所有的测试都是运行在 Ubuntu 20.10 的两台 azure 虚拟机上进行的,配置如下:

1.3 测试方法与步骤

通过一系列装置软件及代码筹备工作之后,咱们开始进行脚本测试数据工作:
批改脚本:
须要将 timeseriesdatabase-comparisons/build/tsdbcompare/write_to_server.sh,把 add=’tdvs’,批改为你选用的数据库服务端 hostname。
运行脚本测试:

timeseriesdatabasecomparisons/build/tsdbcompare/loop_scale_to_server.sh

留神:如果遇到烦扰因素导致写入失败,能够手动传入参数再次执行失去测试后果。

1.4 理论测量数据

通过一番测试后,咱们制作了这样一张表格。通过它咱们能够分明地看到:不论是单线程还是多线程,不论是小批次还是大批次,TDengine 都始终稳稳放弃着 2 倍左右的速度劣势。
其中 5000batch,16wokers 的场景下(InfluxDB 与 Graphite 的比照报告中的测试项),InfluxDB 耗时 35.04 秒,而 TDengine 耗时仅 17.92 秒。

1.5 PK 论断

以后的测试后果比拟无力地阐明了两点论断:

  1. 在 InfluxDB 公布的本人最优的条件下,TDengine 的写入速度是它的两倍。
  2. 当设施数放大到 1000 的时候,TDengine 的写入速度是 InfluxDB 的 5 倍左右。

咱们应用该测试条件(5000batch size,16workers)作出两张以设施台数为横轴的折线图,因为这将极具代表性。

这两张图充分说明了一点:设施数越多,数据量越大,TDengine 的劣势就越显著。

而思考到本次性能测试比照的接口类型并不统一,TDengine 采纳的是 cgo 接口而 InfluxDB 为 rest,性能上会有大量浮动,绝不会从根本上扭转后果。

2、TDengine vs Prometheus 架构设计 PK

通过比照能加深对这两个零碎的了解,不便后续架构选型时作出正确决定。他们的设计思路有很多值得借鉴的中央,尽管目前工作中须要用到这些设计思路的中央不多,然而理解他们的设计能极大满足我的好奇心。

2.1 架构、实现计划不同之处

Prometheus 架构设计

通过 prometheus 的架构图能够看出,prometheus 提供了本地存储,即 tsdb 时序数据库。本地存储的劣势就是运维简略,毛病就是无奈海量的 metrics 长久化和数据存在失落的危险,咱们在理论应用过程中,呈现过几次 wal 文件损坏,无奈再写入的问题。
当然 prometheus2.0 当前压缩数据能力失去了很大的晋升。为了解决单节点存储的限度,prometheus 没有本人实现集群存储,而是提供了近程读写的接口,让用户本人抉择适合的时序数据库来实现 prometheus 的扩展性。

TDengine 分布式系统架构设计

如上图所示,在数据节点(Dnode)、虚构节点(Vnode)、治理节点(Mnode)之上,TDengine 3.0 集群新增了弹性计算节点(Qnode)和流计算节点(Snode)。其中 Qnode 次要在运行查问计算工作中起作用,当一个查问执行时,依赖执行打算,调度器会安顿一个或多个 Qnode;Snode 次要负责运行流计算工作,能够同时执行多个。

2.2 利用差别点

面向场景不同

Prometheus
Prometheus 专一于运维须要的指标数据,特点是存储的就是一个数值,数据附带了很多维度信息,作为标签。

# 如:cpu_total_seconds:{timestamp=2020-09-05-21-27,  host="192.168.1.10", type="idle"}=3551341;

Prometheus 专一于单机性能,用于存储最近一段时间数据,没有长期长久化的思考,弱化分布式集群性能,由其余组件(如 Thanos)来实现高可用。

TDengine

TDengine 用于存储工业中某类传感器设施采集的指标,所以数据类型多样,如浮点,字符串等。
TDengine 面向工业物联网时序场景,数据具备量大、写操作为主读操作为辅、更新删除操作较少等特点,TDengine 从这些数据特点登程设计了存储、查问、写入的性能特色,为了缩小零碎架构的繁杂,TDengine 还自带了数据订阅、流式计算等性能。
TDengine 心愿通过分布式集群来提供可扩展性、高牢靠和高性能,防止单点故障,免费版就是提供集群能力,有长久化多级存储在不同设施上的能力。

应用形式不同

Prometheus
Prometheus 不须要提前建表,而 TDengine 是关系型数据库模型,须要提前定义好表构造。写入的数据须要自带形容,蕴含很多不同维度的标签(lable),这些都是动静的。
TDengine
TDengine 一个采集点一张表,所以一张表不会并发写入。而 Promtheus 为了防止存储的采样数据产生很多小文件,是以块为单位存储指标的。

总而言之,作为时序数据库中的一匹“黑马”,TDengine 还是较为可圈可点的,如果你也有时序数据处理的难题待解,也能够尝试调研一下。TDengine 开源地址:https://github.com/taosdata/T…

正文完
 0