TDengine vs TimescaleDB
TimescaleDB 概览
TDengine 与 TimescaleDB 综合对比
对比项 | TDengine | TimescaleDB |
---|---|---|
官网 | https://www.taosdata.com/ | https://www.timescale.com/ |
数据库类型 | 采用时序数据库模型,支持超级表和子表的概念 | 基于PostgreSQL,时序数据库模型/span> |
技术文档 | https://docs.taosdata.com/ | https://docs.timescale.com/ |
开源性 | 开源 | 开源 |
云服务 | TDengine Cloud | Timescale Cloud |
底层语言 | C | C |
操作系统 | Linux、Windows、MacOS | Linux、Windows、MacOS |
语言连接器 | · Python · Java · C/C++ · Go · Node.js · Rust · C# |
· C/C++ · Java · Python · Go · Node.js |
语法 | 支持标准 SQL | 兼容标准的 SQL 语法,支持 ANSI SQL 标准 |
分布式 | 支持分布式架构 | 支持分布式架构 |
开源许可证 | AGPLv3 | Timescale License(TSL)、Apache License 2.0 |
应用场景 | 工业大数据、物联网 IoT 平台、智能制造、能源数据管理等 | 物联网 IoT 平台、监控和性能管理、DevOps 和 IT 运维、时序数据分析。 |
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 接口。
TimescaleDB 的数据库功能
- 完整的SQL支持:TimescaleDB 支持完整的 SQL 语法,使其易于使用,并且可以按照传统关系数据库的方式进行扩展。
- 高性能的分析功能:它具备强大的分析功能,适用于处理大量时间序列数据。
- 基于PostgreSQL扩展:作为 PostgreSQL 的插件,TimescaleDB 支持已有的 PostgreSQL 特性,可以方便地集成到现有基础设施中。
- 自动分片:TimescaleDB 自动按时间和空间对数据进行分片,以实现高效的存储和查询。
- 强大的写入能力:每秒可以写入百万级的数据点。
- 多个SERVER和CHUNK的并行查询:支持同时查询多个服务器和数据块。
- 自动的按时间保留策略:可以根据时间自动保留数据。
TDengine 关键概念
- 采集量(Metric):采集量是指传感器、设备或其他类型采集点采集的物理量,比如电流、电压、温度、压力、GPS 位置等,是随时间变化的,数据类型可以是整型、浮点型、布尔型,也可是字符串。
- 标签(Label):标签是指传感器、设备或其他类型采集点的静态属性,不是随时间变化的,比如设备型号、颜色、设备的所在地等,数据类型可以是任何类型。
- 数据采集点(Data Collection Point):数据采集点是指按照预设时间周期或受事件触发采集物理量的硬件或软件。一个数据采集点可以采集一个或多个采集量,但这些采集量都是同一时刻采集的,具有相同的时间戳。对于复杂的设备,往往有多个数据采集点,每个数据采集点采集的周期都可能不一样,而且完全独立,不同步。
- 表(Table):因为采集量一般是结构化数据,同时为降低学习门槛,TDengine 采用传统的关系型数据库模型管理数据。用户需要先创建库,然后创建表,之后才能插入或查询数据。
- 超级表(STable):由于一个数据采集点一张表,导致表的数量巨增,难以管理,而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。超级表是指某一特定类型的数据采集点的集合。
- 子表(Subtable):当为某个具体数据采集点创建表时,用户可以使用超级表的定义做模板,同时指定该具体采集点(表)的具体标签值来创建该表。通过超级表创建的表称之为子表。
- 库(Database):库是指一组表的集合。TDengine 容许一个运行实例有多个库,而且每个库可以配置不同的存储策略。
TimescaleDB 关键概念
- Hypertables(超表):Hypertable 是一个虚拟表,表现为单个表,但实际上由多个基础表(称为 chunk)组成。
- Chunks(分片):Chunk 是 Hypertable 的实际存储单元,包含一定时间范围内的数据。
- Continuous Aggregates(连续聚合):Continuous Aggregate 是一种物化视图,实时计算并存储时间序列数据的聚合结果。
- Compression(压缩):TimescaleDB 提供了数据压缩功能,用于减少存储空间和成本。
- Retention Policies(数据保留策略):Retention Policy 是一种自动管理数据生命周期的机制。
- Time Buckets(时间桶):时间桶是一种用于时间序列数据分组的机制,将数据按时间间隔进行分组。
- Multi-Node(多节点架构):TimescaleDB 支持多节点架构,通过多个节点分布数据和查询负载。
- Background Workers(后台工作线程):TimescaleDB 使用后台工作线程处理异步任务,如数据压缩、连续聚合刷新等。
- Integration with PostgreSQL(与 PostgreSQL 的集成):TimescaleDB 完全兼容 PostgreSQL,并在其基础上进行扩展。
- Adaptive Chunking(自适应分片):自适应分片是一种根据数据写入速度和查询模式自动调整分片大小的机制。
TDengine 底层架构
TDengine 可以部署在本地、云端或作为混合解决方案,从而在部署和管理上具有灵活性。
TDengine 的架构设计主要包括以下组件:
- 存储层:TDengine 的存储层负责实际存储数据,它采用了列式存储结构,以提高查询性能和压缩数据大小。数据存储在本地磁盘上,以保证数据的持久性和可靠性。
- 计算层:TDengine 的计算层负责执行查询和计算任务。它包括了查询处理器和计算引擎,用于解析查询语句、执行计算操作,并将结果返回给客户端。
- 分布式架构:TDengine 支持分布式架构,可以将数据分片存储在多个节点上,以实现水平扩展和负载均衡。每个节点可以独立地处理查询请求和执行计算任务,从而提高了系统的性能和可靠性。
- 元数据管理:TDengine 使用元数据来管理数据的存储和分布。元数据包括了数据库、表、分区等信息,以及数据在各个节点上的分布情况。元数据管理使得 TDengine 能够有效地管理和路由数据。
- 客户端接口:TDengine 提供了各种客户端接口,包括 SQL 接口、HTTP 接口和客户端库等。开发人员可以使用。
TimescaleDB 底层架构
TimescaleDB 的底层架构基于 PostgreSQL,并通过插件的方式进行扩展。以下是 TimescaleDB 的主要组成部分:
- Hypertables:TimescaleDB 引入了 Hypertables 的概念,这是一种特殊的表,用于存储时序数据。Hypertables 将数据按照时间进行分片,以便高效地存储和查询。
- Chunks:Hypertables 中的数据被分成多个块,称为 Chunks。每个 Chunk 包含一段时间内的数据。Chunks 可以自动创建和删除,以适应数据的变化。
- Continuous Aggregates:这是一个优化功能,用于预计算聚合结果,以加速查询。它可以在后台自动更新。
- Compression:TimescaleDB 支持数据压缩,以减少存储空间占用。
- 分布式架构:可以将 TimescaleDB 部署在多个节点上,以实现分布式存储和查询。
总之,TimescaleDB 的底层架构充分利用了 PostgreSQL 的功能,并针对时序数据进行了优化,使其成为处理大规模时间序列数据的强大工具。
TDengine 主要特性
由于 TDengine 充分利用了时序数据特点,比如结构化、无需事务、很少删除或更新、写多读少等等,因此与其他时序数据库相比,TDengine 有以下特点:
- 高性能:TDengine 是唯一一个解决了时序数据存储的高基数难题的时序数据库,支持上亿数据采集点,并在数据插入、查询和数据压缩上远胜其它时序数据库。
- 极简时序数据平台:TDengine 内建缓存、流式计算和数据订阅等功能,为时序数据的处理提供了极简的解决方案,从而大幅降低了业务系统的设计复杂度和运维成本。
- 云原生:通过原生的分布式设计、数据分片和分区、存算分离、RAFT 协议、Kubernetes 部署和完整的可观测性,TDengine 是一款云原生时序数据库并且能够部署在公有云、私有云和混合云上。
- 简单易用:对系统管理员来说,TDengine 大幅降低了管理和维护的代价。对开发者来说, TDengine 提供了简单的接口、极简的解决方案和与第三方工具的无缝集成。对数据分析专家来说,TDengine 提供了便捷的数据访问能力。
- 分析能力:通过超级表、存储计算分离、分区分片、预计算和其它技术,TDengine 能够高效地浏览、格式化和访问数据。
- 核心开源:TDengine 的核心代码包括集群功能全部在开源协议下公开。全球超过 528.7k 个运行实例,GitHub Star 22.9k(数据统计至 2024.5.10),且拥有一个活跃的开发者社区。
TimescaleDB 主要特性
- Hypertable:Hypertable 是自动按时间对数据进行分区的 PostgreSQL 表。使用 Hypertable 的方式与常规的 PostgreSQL 表相同,但增加了一些额外功能,使管理时序数据更加轻松。你可以通过创建 Hypertable 来处理时序数据,从而提高性能和查询效率。
- 持续聚合:TimescaleDB 支持在连续时间窗口内进行聚合操作,以便更高效地处理大量时序数据。
- 压缩:TimescaleDB 使用列存储格式,能够更有效地压缩数据,同时减少 I/O 操作。这对于大量时间序列数据的存储和查询至关重要。
TDengine 应用场景
- 物联网:整个物联网 IoT 领域的的数据量越来越大,传统大数据的方案以及以关系型数据库为核心的解决方案都开始捉襟见肘。如何应对大数据量下的实时数据存储、查询、分析,选择一款针对物联网 IoT 平台的时序数据库,成为了目前迫切需要解决的问题。
- 工业互联网:在工业大数据领域,生产、测试、运行阶段都可能会产生大量带有时间戳的传感器数据,这都属于时序数据。时序数据主要由各类型实时监测、检查与分析设备所采集或产生,涉及工业制造、电力、化工、工程作业、智能制造等,具备写多读少、量非常大等典型特性。
- 车联网:通过车机报文的分析,可以实现实时车载网络质量监控、车机零部件健康度监控、用户驾驶行为监控、车载系统安全分析、合规监控等业务。随着汽车保有量和车机传感器数量的日益增多,选对时序数据库,可以避免车载报文平台在数据存储方面的瓶颈。
- 电力能源:伴随电力物联网的发展,发、输、变、配、用各个环节产生的数据量越来越大,严重挑战传统的以关系型数据库为核心的解决方案。如何应对大数据量下电力、能源数据的存储、查询、分析,如何选择一款电力时序数据库,成为了目前迫切需要解决的问题。
- IT 运维:随着服务器、物联网设备逐步增多以及各类新型传感器的加装,传统运维方式越发吃力,严重限制业务发展,因此对硬件系统的运行维护是各行各业的信息服务部门普遍关注和不堪重负的问题。迫切需要基于海量时序数据的平台来支撑繁杂的运维工作。
- 金融:子表多、实时数据量大、数据格式固定和保留时限长的金融行情数据的存储计算十分需要适合的时序数据库来处理,TDengine 提供基于行情中心的资产管理、实时监控、绩效分析、风险分析、舆情分控、股票回测、信号模拟、报表输出等应用投研服务。
TimescaleDB 应用场景
- TimescaleDB 是一款基于 PostgreSQL 的时序数据库,适用于处理大规模时序数据的各种场景。以下是一些主要应用场景:
- 物联网(IoT)系统:使用 TimescaleDB 存储和分析来自 IoT 设备的传感器数据,利用其针对实时监控和报告的时序优化。
- 金融科技应用:将 TimescaleDB 集成到金融科技解决方案中,处理高频交易数据,确保在高峰时段具有强大的性能。
- 地理空间分析:通过 TimescaleDB 存储地理位置数据,例如出租车轨迹、船只位置等,以便进行时序分析。
- 监控和告警系统:使用 TimescaleDB 存储和查询监控数据、事件日志和告警信息,以便快速响应和分析。
- 传感器数据采集:TimescaleDB 适用于存储和分析各种传感器数据,如气象、环境、工业设备等。