TDengine vs InfluxDB
InfluxDB 概览
TDengine 与 InfluxDB 综合对比
对比项 | TDengine | InfluxDB |
---|---|---|
官网 | www.taosdata.com | www.influxdata.com |
数据库类型 | 采用时序数据库模型,支持超级表和子表的概念 | 采用时序数据库模型 |
技术文档 | docs.taosdata.com | docs.influxdata.com |
开源性 | 开源 | 开源 |
云服务 | TDengine Cloud | InfluxDB Cloud |
底层语言 | C | Go/Rust |
支持的操作系统 | Linux、Windows、MacOS | Linux、Windows、MacOS |
支持的语言连接器 | Python Java C/C++ Go Node.js Rust C# |
Go Python Java JavaScript/Node.js C#/.NET Ruby PHP R |
语法 | 支持标准 SQL | 支持InfluxQL、Flux、SQL、Line Protocol |
分布式 | 支持分布式架构 | 支持分布式架构 |
开源性质 | AGPLv3 | MIT |
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 接口。
InfluxDB 的数据库功能
高性能存储和检索
- 时间序列数据存储:专为存储大量时间序列数据而设计,支持高效的写入和查询操作。
- 快速数据检索:通过时间戳快速检索历史数据,支持按时间范围和条件进行查询。
分布式架构
- 分布式集群:支持多节点部署,提供水平扩展和高可用性。
- 数据分片和复制:支持数据分片存储和数据复制,提高系统的稳定性和容错能力。
数据模型
- 测量 (Measurement):类似于关系型数据库中的表,每个测量包含一组相关的时间序列数据。
- 标签 (Tag):用于对数据点进行分类和索引,提高查询效率。
- 字段 (Field):数据点的实际值,与时间戳关联,是数据库中的数据载体。
- 时间戳 (Timestamp):每个数据点的时间属性,用于记录数据生成的时间。
查询语言
- InfluxQL:InfluxDB 特有的 SQL-like 查询语言,支持时间函数、聚合函数和分组操作。
- Flux:新一代的数据脚本语言,支持数据流处理、函数式编程和复杂数据操作。
数据保留策略
- 数据保留策略 (Retention Policy):定义数据保存的时间范围和粒度,支持自动删除过期数据。
- 连续查询 (Continuous Queries):周期性地计算和汇总数据,生成新的存储测量。
集成和扩展
- Telegraf 插件:用于收集各种不同来源的数据,并将其发送到 InfluxDB 中。
- HTTP API:支持通过 RESTful API 进行数据的写入、查询和管理操作。
- 数据导入和导出:支持数据的导入和导出,便于与其他系统集成和数据迁移。
安全和管理
- 用户管理:支持多用户和权限管理,控制用户对数据库和数据的访问权限。
- HTTPS 支持:通过 HTTPS 连接保护数据传输的安全性。
- 数据加密:支持数据加密存储和传输,保护敏感数据不被未授权访问。
监控和警报
- Chronograf 可视化:提供仪表板和图表,实时监控数据库和系统的运行状态。
- Kapacitor 警报:实时数据处理和警报引擎,支持基于数据的警报和通知。
高级功能
- SQL 支持:InfluxDB 3.0 开始支持标准 SQL 查询语言,增强了数据分析和查询的灵活性。
- 复制和备份:支持数据的复制和备份,保证数据的高可用性和灾备恢复能力。
TDengine 关键概念
- 采集量(Metric):采集量是指传感器、设备或其他类型采集点采集的物理量,比如电流、电压、温度、压力、GPS 位置等,是随时间变化的,数据类型可以是整型、浮点型、布尔型,也可是字符串。
- 标签(Label):标签是指传感器、设备或其他类型采集点的静态属性,不是随时间变化的,比如设备型号、颜色、设备的所在地等,数据类型可以是任何类型。
- 数据采集点(Data Collection Point):数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,但这些采集量都是同一时刻采集的,具有相同的时间戳。对于复杂的设备,往往有多个数据采集点,每个数据采集点采集的周期都可能不一样,而且完全独立,不同步。
- 表(Table):因为采集量一般是结构化数据,同时为降低学习门槛,TDengine 采用传统的关系型数据库模型管理数据。用户需要先创建库,然后创建表,之后才能插入或查询数据。
- 超级表(STable):由于一个数据采集点一张表,导致表的数量巨增,难以管理,而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。超级表是指某一特定类型的数据采集点的集合。
- 子表(Subtable):当为某个具体数据采集点创建表时,用户可以使用超级表的定义做模板,同时指定该具体采集点(表)的具体标签值来创建该表。通过超级表创建的表称之为子表。
- 库(Database):库是指一组表的集合。TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。
InfluxDB 关键概念
- 数据库 (Database):数据库是存储数据的容器。一个 InfluxDB 实例可以包含多个数据库,每个数据库可以存储不同的时间序列数据。
- 测量 (Measurement):测量相当于传统关系型数据库中的表。每个测量包含一组相关的时间序列数据。测量名称用于区分不同类型的数据。
- 标签 (Tag):标签是键值对,用于对数据点进行分类和索引。标签有助于快速查询和分组操作。标签通常用于存储不变的元数据,例如位置、主机名或传感器类型。
- 字段 (Field):字段是数据点的实际值,与时间戳关联。字段可以是任何类型的数据(字符串、整数、浮点数、布尔值)。字段不用于索引,适合存储变化的数据值。
- 时间戳 (Timestamp):每个数据点都有一个时间戳,用于记录数据生成的时间。时间戳是时间序列数据的关键属性,支持基于时间范围的查询和分析。
- 数据点 (Point):数据点是 InfluxDB 中存储的基本单元,每个数据点由测量名称、标签集、字段集和时间戳组成。
- 数据保留策略 (Retention Policy, RP):数据保留策略定义了数据在数据库中保存的时间长度。过期的数据会被自动删除。每个数据库可以有多个数据保留策略,支持不同的保存策略和存储期限。
- 连续查询 (Continuous Query, CQ):连续查询是一种预定义的查询,会定期运行并将结果存储在数据库中。连续查询通常用于计算和存储聚合数据,减少查询负载。
- 标签集 (Tag Set):标签集是具有相同标签键和标签值的数据点的集合。标签集有助于分组和聚合操作,提高查询效率。
- 系列 (Series):系列是具有相同测量名称、标签集的数据点的集合。系列是 InfluxDB 中的基本数据存储单元,所有数据点都属于某个系列。
- 行协议 (Line Protocol):行协议是一种高效的文本格式,用于写入数据到 InfluxDB。
- InfluxQL:InfluxQL 是 InfluxDB 特有的 SQL-like 查询语言,支持时间序列数据的查询、聚合和分析。
- Flux:Flux 是一种功能强大的脚本语言,支持更复杂的数据查询和处理。Flux 适用于跨数据库查询、数据转换和高级计算。
TDengine 底层架构
TDengine 可以部署在本地、云端或作为混合解决方案,从而在部署和管理上具有灵活性。
TDengine 的架构设计主要包括以下组件:
- 存储层:TDengine 的存储层负责实际存储数据,它采用了列式存储结构,以提高查询性能和压缩数据大小。数据存储在本地磁盘上,以保证数据的持久性和可靠性。
- 计算层:TDengine 的计算层负责执行查询和计算任务。它包括了查询处理器和计算引擎,用于解析查询语句、执行计算操作,并将结果返回给客户端。
- 分布式架构:TDengine 支持分布式架构,可以将数据分片存储在多个节点上,以实现水平扩展和负载均衡。每个节点可以独立地处理查询请求和执行计算任务,从而提高了系统的性能和可靠性。
- 元数据管理:TDengine 使用元数据来管理数据的存储和分布。元数据包括了数据库、表、分区等信息,以及数据在各个节点上的分布情况。元数据管理使得 TDengine 能够有效地管理和路由数据。
- 客户端接口:TDengine 提供了各种客户端接口,包括 SQL 接口、HTTP 接口和客户端库等。开发人员可以使用。
InfluxDB 底层架构
- SSTable(Sorted String Table):SSTable 是 InfluxDB 存储引擎的基础,它是一种持久化、有序且不可变的键值存储结构。每个 SSTable 包含一系列可配置大小的块(通常为 64KB),并在尾部存储索引,用于快速查找特定块。在打开 SSTable 时,索引会加载到内存中,然后通过二分查找定位到磁盘上的数据块。
- LSM(Log-Structured Merge Tree):LSM 是一种分层、有序且面向磁盘的数据结构。它包括内存部分(活跃内存表、不可变内存表、块缓存)和磁盘部分(SSTable、WAL)。写入数据时,先写入活跃内存表,满后转为不可变内存表并刷新到磁盘,成为 Level 0 的 SSTable。读取数据时,依次从内存读取(活跃内存表、不可变内存表、块缓存),然后从磁盘读取各级别的 SSTable。
- TSM(Time-Structured Merge):TSM 是 InfluxDB 中的一种概念,用于存储数据。它包括以下要素:
- Measurement(测量):类似于表格,包含标签和字段。
- Tags(标签):用于分类和查询优化,建立索引。
- Fields(字段):存储实际数据值,不建立索引。
- 空间放大、写放大和读放大:这些是 InfluxDB 存储引擎的一些特性。空间放大指实际占用的磁盘空间比数据的真正大小偏多;写放大和读放大分别表示写入和读取数据时的操作次数。
TDengine 主要特性
由于 TDengine 充分利用了时序数据特点,比如结构化、无需事务、很少删除或更新、写多读少等等,因此与其他时序数据库相比,TDengine 有以下特点:
- 高性能:TDengine 是唯一一个解决了时序数据存储的高基数难题的时序数据库,支持上亿数据采集点,并在数据插入、查询和数据压缩上远胜其它时序数据库。
- 极简时序数据平台:TDengine 内建缓存、流式计算和数据订阅等功能,为时序数据的处理提供了极简的解决方案,从而大幅降低了业务系统的设计复杂度和运维成本。
- 云原生:通过原生的分布式设计、数据分片和分区、存算分离、RAFT 协议、Kubernetes 部署和完整的可观测性,TDengine 是一款云原生时序数据库并且能够部署在公有云、私有云和混合云上。
- 简单易用:对系统管理员来说,TDengine 大幅降低了管理和维护的代价。对开发者来说, TDengine 提供了简单的接口、极简的解决方案和与第三方工具的无缝集成。对数据分析专家来说,TDengine 提供了便捷的数据访问能力。
- 分析能力:通过超级表、存储计算分离、分区分片、预计算和其它技术,TDengine 能够高效地浏览、格式化和访问数据。
- 核心开源:TDengine 的核心代码包括集群功能全部在开源协议下公开。全球超过 528.7k 个运行实例,GitHub Star 22.9k(数据统计至 2024.5.10),且拥有一个活跃的开发者社区。
InfluxDB 主要特性
- 高性能:InfluxDB 被设计为高性能的时间序列数据库。它能够快速地处理大量的时间序列数据,适用于监控、日志、传感器数据等场景。
- 标签(Tags)和字段(Fields):InfluxDB 使用标签和字段来组织数据。标签用于索引和过滤数据,而字段存储实际的数据值。这种模型使得查询和聚合变得更加灵活。
- SQL-Like 查询语言:InfluxDB 支持类似 SQL 的查询语言,使用户可以轻松地执行数据查询、聚合和筛选操作。
- 保留策略(Retention Policies):您可以定义不同的保留策略,以控制数据在数据库中的保留时间。这对于数据存储和清理非常有用。
- 连续查询(Continuous Queries):InfluxDB 允许您创建连续查询,以定期计算和聚合数据,并将结果存储在新的测量中。
- 数据复制和高可用性:InfluxDB 支持数据复制和高可用性配置,确保数据的可靠性和持久性。
- 插件和集成:InfluxDB 可以与其他工具和服务集成,例如 Grafana、Telegraf、Kapacitor 等。
- 开源和社区支持:InfluxDB 是开源的,拥有活跃的社区,您可以从中获取支持和帮助。
TDengine 应用场景
- 物联网:整个物联网 IoT 领域的的数据量越来越大,传统大数据的方案以及以关系型数据库为核心的解决方案都开始捉襟见肘。如何应对大数据量下的实时数据存储、查询、分析,选择一款针对物联网 IoT 平台的时序数据库,成为了目前迫切需要解决的问题。
- 工业互联网:在工业大数据领域,生产、测试、运行阶段都可能会产生大量带有时间戳的传感器数据,这都属于时序数据。时序数据主要由各类型实时监测、检查与分析设备所采集或产生,涉及工业制造、电力、化工、工程作业、智能制造等,具备写多读少、量非常大等典型特性。
- 车联网:通过车机报文的分析,可以实现实时车载网络质量监控、车机零部件健康度监控、用户驾驶行为监控、车载系统安全分析、合规监控等业务。随着汽车保有量和车机传感器数量的日益增多,选对时序数据库,可以避免车载报文平台在数据存储方面的瓶颈。
- 电力能源:伴随电力物联网的发展,发、输、变、配、用各个环节产生的数据量越来越大,严重挑战传统的以关系型数据库为核心的解决方案。如何应对大数据量下电力、能源数据的存储、查询、分析,如何选择一款电力时序数据库,成为了目前迫切需要解决的问题。
- IT 运维:随着服务器、物联网设备逐步增多以及各类新型传感器的加装,传统运维方式越发吃力,严重限制业务发展,因此对硬件系统的运行维护是各行各业的信息服务部门普遍关注和不堪重负的问题。迫切需要基于海量时序数据的平台来支撑繁杂的运维工作。
- 金融:子表多、实时数据量大、数据格式固定和保留时限长的金融行情数据的存储计算十分需要适合的时序数据库来处理,TDengine 提供基于行情中心的资产管理、实时监控、绩效分析、风险分析、舆情分控、股票回测、信号模拟、报表输出等应用投研服务。
InfluxDB 应用场景
- 监控和度量:InfluxDB 广泛应用于监控和度量领域。它可以存储和分析服务器指标、网络设备数据、应用程序日志等。如果您需要实时监控系统性能、资源利用率或应用程序的运行状况,InfluxDB是一个理想的选择。
- 物联网(IoT):InfluxDB 适用于存储和处理物联网设备生成的时间序列数据,例如温度、湿度等传感器数据。它的高性能和灵活性使其成为物联网应用的首选数据库。
- 日志分析:InfluxDB 可以用于存储和分析大量的日志数据。如果您需要存储和查询应用程序日志、系统日志或其他类型的日志,InfluxDB 可以帮助您有效地管理这些数据。
- 时间序列分析:InfluxDB 适用于进行各种时间序列数据的分析,例如预测、异常检测等。如果您需要对历史数据进行趋势分析或预测未来的趋势,InfluxDB 可以提供强大的查询和聚合功能。