TDengine vs IoTDB

TDengine 时序数据库与 IoTDB 时序数据库综合对比

TDengine 概览

TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。它能安全高效地将大量设备、数据采集器每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,对业务运行状态进行实时监测、预警,提供实时的商业洞察。

IoTDB 概览

IoTDB 是一种高性能的时间序列数据库,能够存储各种形式的时间序列数据,例如指标、事件、日志和跟踪。IoTDB 由 InfluxData 开发,首次发布于 2013 年。IoTDB 是一个用 Go 语言编写的开源数据库,注重性能、可扩展性和开发者的生产力。该数据库针对大规模处理时间序列数据进行了优化,因此在监控性能指标、物联网数据和实时分析等用例中很欢迎。

TDengine 与 IoTDB 综合对比

对比项 TDengine IoTDB
官网 www.taosdata.com iotdb.apache.org
数据库类型 采用时序数据库模型,支持超级表和子表的概念。 采用时序数据库模型
技术文档 docs.taosdata.com iotdb.apache.org/UserGuide/
开源性 开源 开源
云服务 TDengine Cloud 第三方云服务
底层语言 C Java
支持的操作系统 Linux、Windows、MacOS Linux、Windows、MacOS、其他Unix-like系统
支持的语言连接器 · Python
· Java
· C/C++
· Go
· Node.js
· Rust
· C#
· Java
· Python
· C++
· Go
· Node.js
· JDBC/ODBC
· REST API
语法 支持标准 SQL 类似于SQL的IoTDB SQL
分布式 支持分布式架构 支持分布式架构
开源性质 AGPLv3 Apache License 2.0
应用场景 工业大数据、物联网 IoT 平台、智能制造、能源数据管理等 专门为物联网 IoT 平台和工业大数据设计

TDengine 的数据库功能

  • 高效写入写入数据:支持 SQL 写入、无模式写入,并可与多种第三方工具的无缝集成,它们都可以仅通过配置而无需任何代码即可将数据写入 TDengine。
  • 高效查询:支持标准 SQL,并提供一系列时序数据特有查询和窗口函数,支持 UDF。
  • 流式计算:TDengine 不仅支持连续查询,还支持事件驱动的流式计算,这样在处理时序数据时就无需 Flink 或 Spark 这样流式计算组件。
  • 数据订阅:应用程序可以订阅一张表或一组表的数据,提供与 Kafka 相同的 API,并且可以指定过滤条件。
  • 缓存功能:将每张表的最后一条记录缓存起来,这样无需 Redis 就能对时序数据进行高效处理。
  • 可视化:支持与各种第三方可视化组件的无缝集成,如 Grafana、Seeq、Google Data Studio 等。
  • 集群:可以通过增加节点进行水平扩展以提升处理能力,通过多副本提供高可用能力,支持通过 Kubernetes 部署 TDengine。
  • 管理:监控运行在 TDengine 中的实例,支持多种数据导入/导出方式
  • 工具:提供交互式命令行程序(CLI),便于管理集群,检查系统状态,做即席查询;提供压力测试工具 taosBenchmark,用于测试 TDengine 的性能
  • 提供各种语言的连接器:如 C/C++、Java、Go、Node.js、Rust、Python、C# 等,支持 REST 接口。

IoTDB 的数据库功能

数据存储和管理

  • 时间序列存储:IoTDB支持高效存储和管理大量的时间序列数据,每个时间序列可以包含多个测量值。
  • 多维度时间序列:支持多维度的时间序列数据,允许用户按照设备、传感器类型等维度组织数据。

数据模型

  • 灵活的数据模型:IoTDB的数据模型允许用户灵活定义时间序列的结构和属性,如数据类型、编码方式等。
  • 动态模式更新:支持动态添加和删除时间序列,以适应数据模型的变化需求。

数据查询和分析

  • SQL-like 查询语言:IoTDB提供类似于SQL的查询语言(IoTDB SQL),支持各种数据查询操作,如数据检索、聚合、过滤等。
  • 时序数据聚合:支持在不同时间粒度上的数据聚合操作,如平均值、最大值、最小值等统计函数。
  • 条件过滤:支持按照时间范围、设备ID、传感器ID等条件过滤数据。

数据操作

  • 数据写入:支持实时数据写入,可以通过多种方式(如API调用、批量加载、文件导入)将数据存储到IoTDB中。
  • 数据删除:支持按照时间范围或条件删除数据。
  • 数据更新:支持更新现有数据的值。

数据安全和权限管理

  • 用户认证和授权:IoTDB支持用户认证和授权机制,可以对用户和角色进行管理,并控制其对数据库的访问权限。
  • 数据加密:支持数据在传输和存储过程中的加密,保障数据的安全性。

高性能和优化

  • 高效数据压缩:IoTDB使用多种压缩算法对数据进行压缩存储,节约存储空间并提高查询性能。
  • 查询优化:通过索引、预聚合和分布式查询等技术,优化查询性能,支持大规模数据查询和分析。
  • 负载均衡:支持分布式架构下的负载均衡,确保系统吞吐量和响应能力。

扩展和集成

  • 插件机制:IoTDB支持插件机制,允许开发者自定义功能扩展,如自定义编码器、UDF(用户自定义函数)等。
  • 第三方工具和库:IoTDB提供了多种语言的客户端库和API,支持与常见的编程语言和工具集成,如Java、Python、C++、Go等。

监控和警报

  • 集群管理工具:IoTDB提供了集群管理工具,帮助用户管理和监控分布式集群的运行状态和性能指标。
  • 性能监控:支持监控关键性能指标,如查询延迟、数据吞吐量等,帮助用户优化系统配置和调整查询性能。

跨平台和部署

  • 跨平台支持:IoTDB可在多种操作系统上运行,包括Windows、Linux和macOS等。
  • 灵活部署:支持单节点部署和分布式部署两种模式,以满足不同规模和需求的部署场景。

TDengine 关键概念

  • 采集量(Metric):采集量是指传感器、设备或其他类型采集点采集的物理量,比如电流、电压、温度、压力、GPS 位置等,是随时间变化的,数据类型可以是整型、浮点型、布尔型,也可是字符串。
  • 标签(Label):标签是指传感器、设备或其他类型采集点的静态属性,不是随时间变化的,比如设备型号、颜色、设备的所在地等,数据类型可以是任何类型。
  • 数据采集点(Data Collection Point):数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,但这些采集量都是同一时刻采集的,具有相同的时间戳。对于复杂的设备,往往有多个数据采集点,每个数据采集点采集的周期都可能不一样,而且完全独立,不同步。
  • 表(Table):因为采集量一般是结构化数据,同时为降低学习门槛,TDengine 采用传统的关系型数据库模型管理数据。用户需要先创建库,然后创建表,之后才能插入或查询数据。
  • 超级表(STable):由于一个数据采集点一张表,导致表的数量巨增,难以管理,而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。超级表是指某一特定类型的数据采集点的集合。
  • 子表(Subtable):当为某个具体数据采集点创建表时,用户可以使用超级表的定义做模板,同时指定该具体采集点(表)的具体标签值来创建该表。通过超级表创建的表称之为子表
  • 库(Database):库是指一组表的集合。TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。

IoTDB 关键概念

  • 时间序列(Time Series):在IoTDB中,时间序列是数据的基本单位,由时间戳和一个或多个测量值组成。每个时间序列都有一个唯一的标识符,通常包括设备ID、传感器ID和测量指标。
  • 设备(Device):设备是生成时间序列数据的物理或虚拟设备,如传感器、控制器或应用程序。设备通常具有唯一的标识符,用于区分不同的设备。
  • 数据类型(Data Type):数据类型定义了时间序列中测量值的类型,如整数、浮点数、布尔值等。
  • 编码方式(Encoding):编码方式决定了在存储和传输时间序列数据时使用的压缩算法和编码格式。IoTDB支持多种编码方式,如RLE(Run-Length Encoding)、TS_2DIFF(Two-point Difference)、Gorilla等。
  • 数据点(Data Point):数据点是时间序列中特定时间点的测量值。每个数据点由时间戳和测量值组成。
  • 时间戳(Timestamp):时间戳是数据点对应的时间信息,通常以Unix时间戳格式表示(以毫秒或微秒为单位)。
  • 元数据(Metadata):元数据包含有关时间序列的描述信息,包括时间序列的名称、数据类型、编码方式、存储位置等。
  • 节点(Node):在分布式架构中,节点是集群中的一个成员,可以是数据节点(Data Node)、元数据节点(Metadata Node)或协调节点(Coordinator Node)。
  • 数据节点(Data Node):数据节点负责实际存储和处理时间序列数据。
  • 元数据节点(Metadata Node):元数据节点管理系统的元数据信息,如时间序列的结构和存储位置。
  • 协调节点(Coordinator Node):协调节点接收客户端请求,将请求分发到相应的数据节点和元数据节点,并整合查询结果返回给客户端。
  • 用户定义函数UDF:UDF是用户自定义的函数,可以在IoTDB中执行,用于扩展查询和分析功能。
  • 数据压缩(Data Compression):IoTDB使用压缩算法对时间序列数据进行压缩,以减少存储空间和提高查询性能。
  • 查询语言(Query Language):IoTDB SQL是类似于SQL的查询语言,用于执行各种数据查询和操作。
  • 插件(Plugin):插件机制允许开发者扩展IoTDB的功能,如自定义编码器、UDF、数据存储管理等。

TDengine 底层架构

TDengine 可以部署在本地、云端或作为混合解决方案,从而在部署和管理上具有灵活性。

TDengine 的架构设计主要包括以下组件:

  • 存储层:TDengine 的存储层负责实际存储数据,它采用了列式存储结构,以提高查询性能和压缩数据大小。数据存储在本地磁盘上,以保证数据的持久性和可靠性。
  • 计算层:TDengine 的计算层负责执行查询和计算任务。它包括了查询处理器和计算引擎,用于解析查询语句、执行计算操作,并将结果返回给客户端。
  • 分布式架构:TDengine 支持分布式架构,可以将数据分片存储在多个节点上,以实现水平扩展和负载均衡。每个节点可以独立地处理查询请求和执行计算任务,从而提高了系统的性能和可靠性。
  • 元数据管理:TDengine 使用元数据来管理数据的存储和分布。元数据包括了数据库、表、分区等信息,以及数据在各个节点上的分布情况。元数据管理使得 TDengine 能够有效地管理和路由数据。
  • 客户端接口:TDengine 提供了各种客户端接口,包括 SQL 接口、HTTP 接口和客户端库等。开发人员可以使用。

IoTDB 底层架构

数据模型

  • IoTDB 的基本数据单元是时间序列,每个时间序列包含多个时间点的测量数据,每个数据点由时间戳和测量值组成。

存储管理

  • IoTDB 采用类似于列式存储的方式,将相同时间序列的数据存储在一起,以提高查询效率和压缩率。
  • 数据存储在硬盘上,使用多种压缩算法(如 RLE、Delta、Gorilla 等)对数据进行压缩,节省存储空间。

分布式架构

  • 数据节点(Data Node):存储实际的时间序列数据。
  • 元数据节点(Metadata Node):管理集群的元数据信息。
  • 协调节点(Coordinator Node):接收客户端请求,协调集群中各节点的工作。
  • IoTDB 支持分布式部署,通过负载均衡机制确保数据均匀分布和集群资源的最优利用。
  • 提供容错机制和高可用性,确保即使部分节点故障,系统仍然可靠运行。

查询和分析

  • IoTDB 提供 SQL-like 的查询语言(IoTDB SQL),支持多种查询操作,如数据检索、聚合、过滤等。
  • 查询引擎通过索引和预聚合技术优化查询性能,支持快速响应大规模数据的查询请求。

扩展性和灵活性

  • IoTDB 提供插件机制,允许开发者扩展系统的功能,如自定义编码器、用户自定义函数(UDF)等。
  • 插件机制使得 IoTDB 可以灵活适应不同的应用场景和需求。

安全性和管理

  • IoTDB 支持用户认证和授权,通过用户名和密码管理用户访问权限,保护数据安全。
  • 支持数据传输和存储的加密,防止数据泄露和篡改。

用户接口

  • IoTDB 提供多种编程语言的客户端接口,如 Java、Python、C++、Go 等,方便开发者与 IoTDB 进行集成和交互。

监控和管理工具

  • IoTDB 提供集群管理工具,帮助用户监控和管理分布式集群的运行状态和性能指标。
  • 支持性能监控,如查询延迟、数据吞吐量等,帮助用户优化系统配置和调整查询性能。

TDengine 主要特性

由于 TDengine 充分利用了时序数据特点,比如结构化、无需事务、很少删除或更新、写多读少等等,因此与其他时序数据库相比,TDengine 有以下特点:

  • 高性能:TDengine 是唯一一个解决了时序数据存储的高基数难题的时序数据库,支持上亿数据采集点,并在数据插入、查询和数据压缩上远胜其它时序数据库。
  • 极简时序数据平台:TDengine 内建缓存、流式计算和数据订阅等功能,为时序数据的处理提供了极简的解决方案,从而大幅降低了业务系统的设计复杂度和运维成本。
  • 云原生:通过原生的分布式设计、数据分片和分区、存算分离、RAFT 协议、Kubernetes 部署和完整的可观测性,TDengine 是一款云原生时序数据库并且能够部署在公有云、私有云和混合云上。
  • 简单易用:对系统管理员来说,TDengine 大幅降低了管理和维护的代价。对开发者来说, TDengine 提供了简单的接口、极简的解决方案和与第三方工具的无缝集成。对数据分析专家来说,TDengine 提供了便捷的数据访问能力。
  • 分析能力:通过超级表、存储计算分离、分区分片、预计算和其它技术,TDengine 能够高效地浏览、格式化和访问数据。
  • 核心开源:TDengine 的核心代码包括集群功能全部在开源协议下公开。全球超过 528.7k 个运行实例,GitHub Star 22.9k(数据统计至 2024.5.10),且拥有一个活跃的开发者社区。

IoTDB 主要特性

高性能和高吞吐量

  • IoTDB 使用列式存储和多种数据压缩算法,以最大限度地减少存储空间和提高数据读写效率。
  • 支持快速的数据写入和高效的查询操作,适合处理大规模时序数据。

多维度时间序列支持

  • 支持多维度时间序列,用户可以按照设备、传感器类型等维度组织和管理数据,以适应复杂的应用场景。

SQL-like 查询语言

  • 提供类似于SQL的查询语言(IoTDB SQL),支持各种数据查询操作,如数据检索、聚合、过滤、排序等。

分布式架构和高可用性

  • 支持分布式部署,通过负载均衡机制确保集群资源的最优利用。
  • 提供容错机制和高可用性,保证系统在部分节点故障时仍能够可靠运行。

数据安全和权限管理

  • 支持用户认证和授权机制,通过用户名和密码管理用户访问权限,保护数据安全。
  • 支持数据传输和存储的加密,防止数据泄露和篡改。

可扩展性和灵活性

  • 提供插件机制,允许开发者扩展系统的功能,如自定义编码器、用户自定义函数(UDF)等。
  • 灵活适应不同的应用场景和需求。

实时数据处理能力

  • 支持实时数据写入和实时查询,满足对实时性要求高的应用场景。

跨平台支持

  • 支持在多种操作系统上运行,包括 Windows、Linux 和 macOS 等。

监控和管理工具

  • 提供集群管理工具,帮助用户监控和管理分布式集群的运行状态和性能指标。
  • 支持性能监控,如查询延s迟、数据吞吐量等,帮助用户优化系统配置和调整查询性能。

开放源代码

  • Apache IoTDB 是一款开源软件,用户可以免费获取、使用和修改其源代码,同时也可以参与社区贡献和改进。

TDengine 应用场景

  • 物联网:整个物联网 IoT 领域的的数据量越来越大,传统大数据的方案以及以关系型数据库为核心的解决方案都开始捉襟见肘。如何应对大数据量下的实时数据存储、查询、分析,选择一款针对物联网 IoT 平台的时序数据库,成为了目前迫切需要解决的问题。
  • 工业互联网:在工业大数据领域,生产、测试、运行阶段都可能会产生大量带有时间戳的传感器数据,这都属于时序数据。时序数据主要由各类型实时监测、检查与分析设备所采集或产生,涉及工业制造、电力、化工、工程作业、智能制造等,具备写多读少、量非常大等典型特性。
  • 车联网:通过车机报文的分析,可以实现实时车载网络质量监控、车机零部件健康度监控、用户驾驶行为监控、车载系统安全分析、合规监控等业务。随着汽车保有量和车机传感器数量的日益增多,选对时序数据库,可以避免车载报文平台在数据存储方面的瓶颈。
  • 电力能源:伴随电力物联网的发展,发、输、变、配、用各个环节产生的数据量越来越大,严重挑战传统的以关系型数据库为核心的解决方案。如何应对大数据量下电力、能源数据的存储、查询、分析,如何选择一款电力时序数据库,成为了目前迫切需要解决的问题。
  • IT 运维:随着服务器、物联网设备逐步增多以及各类新型传感器的加装,传统运维方式越发吃力,严重限制业务发展,因此对硬件系统的运行维护是各行各业的信息服务部门普遍关注和不堪重负的问题。迫切需要基于海量时序数据的平台来支撑繁杂的运维工作。
  • 金融:子表多、实时数据量大、数据格式固定和保留时限长的金融行情数据的存储计算十分需要适合的时序数据库来处理,TDengine 提供基于行情中心的资产管理、实时监控、绩效分析、风险分析、舆情分控、股票回测、信号模拟、报表输出等应用投研服务。

IoTDB 应用场景

  • 设备监控与管理:实时存储和分析传感器数据,监控设备状态和性能;支持设备故障预测、维护计划优化等功能。
  • 智能城市和智能家居:收集和分析城市基础设施(如交通、水电气)和家居设备(如智能电器)的实时数据;支持智能化决策和资源优化。
  • 工厂自动化与监控:实时监控生产线上的各种设备和传感器数据,提升生产效率和质量;支持工业设备预测性维护和异常检测。
  • 能源监控与管理:监控能源消耗和生产过程中的数据,优化能源利用效率;支持能源需求响应和节能减排。
  • 车辆追踪与管理:实时监控车辆位置和运输过程中的数据,提高运输效率和安全性;支持路况监控和路径优化。
  • 健康数据收集与分析:收集和分析医疗设备(如心率、血压监测器)生成的数据,支持远程健康监控和医疗决策。
  • 实时数据库分析:处理大规模实时数据流,支持快速查询和复杂分析;支持数据挖掘、预测分析等高级分析任务。
  • 边缘计算环境:在边缘设备上部署,支持边缘计算应用,减少数据传输延迟和网络带宽消耗;支持离线数据处理和断网情况下的本地存储与分析。
  • 环境监测与污染控制:收集和分析环境监测数据,支持空气质量监控和污染源追踪。
  • 金融和电子商务:实时处理交易数据和用户行为数据,支持欺诈检测和实时推荐系统。

快速运行 TDengine

高性能、分布式的物联网、工业大数据平台