一篇文章让你全面理解TDengine
本文将从以下几个方面进行全面介绍TDengine。
- TDengine的基本介绍
- TDengine的发展历程
- TDengine的优势
- TDengine的适用场景
- TDengine写入存储策略
- TDengine的特点
TDengine的基本介绍
一句话了解TDengine
TDengine是物联网、车联网、工业互联网、运维监控等优化的高效存储、查询、分析时序大数据的平台。您可以使用关系数据库MySQL使用起来简单方便。
为什么会有TDengine
TDengine总结出了物联网数据的十三大特点:
- 数据是时间顺序,必须有时间戳;
- 数据结构化;
- 数据很少更新或删除;
- 唯一的数据源;
- 写多读少;
- 用户关注的是一段时间的趋势,而不是特定时间点的值;
- 数据有保留期;
- 数据的查询和分析必须基于时间段和地理区域;
- 除存储查询外,还需要各种统计和实时计算操作;
- 流量稳定,可预测;
- 通常需要一些特殊的计算,如插值;
- 数据量巨大,一天采集的数据就可以超过100亿条。
总结这些特点后,物联网数据,如日志数据,几乎不可能更新操作,数据库中的事务处理完全多余;数据是时间顺序,时间戳自然可以作为主键,不需要复杂的索引结构;
物联网数据是结构化的,就像HBase、Cassandra那样用Key-Value存储、计算效率和存储效率大大降低,应采用结构化存储;
物联网数据的冷热程度由时间决定,新收集的数据是最热的,而不是用户点击决定。因此,简单、先进、先出的内存管理可以实现有效的缓存Redis;
从设备的角度来看,物联网数据是一个数据流。实现滑动窗口的流量计算不是最自然的事情。它怎么能被使用?Spark如此复杂的引擎;
对于数据分区,根据设备分区和时间段简单分区很容易解决,根本不需要复杂的分区机制;
物联网数据流相对稳定,物联网设备本身必须有缓存能力,可以完全放弃Kafka为了满足需求,这些套件实现了简单的信息队列和数据订阅。
然后发现有时序数据库,立即查看他们的文档和代码,发现他们使用了时序数据的一些特征,但仍然没有充分利用,只定位为数据库。
后来,我了解到工业实时数据库,发现这些实时数据库都是老古董产品,基本都是Windows研发价格昂贵,没有标准SQL,几乎没有水平扩展,几乎没有大数据分析能力,也没有能力应对不断增长的大数据量和大数据分析需求,迟早会被淘汰。
一个高分布式、可靠、持久的存储消息队列,每部手机需要推送的消息放在一个队列中。消息队列和物联网的时间序列数据有区别吗?本质上没有。
一是非结构化,二是结构化;
一个是简单的进出,但另一个需要分析和计算;
系统的架构设计没有太大区别。
因此TDengine快速定位产品,即物联网大数据平台,整合时间数据库、缓存、消息订阅、流量计算等一系列功能,一站式解决物联网大数据问题,大大降低系统研发和维护的复杂性和成本。
研究完物联网数据的特点后,TDengine做了两个技术创新点,
- 一台设备一张表的数据模型大大提高了单台设备的数据插入和查询效率
- 静态标签用于每个表,静态标签数据与收集的动态数据完全分开存储,以解决多表聚合查询问题
TDengine的开源协议
TDengine目前已经在GitHub上开源。使用是。AGPL许可。AGPL的全称为:GNU Affero General Public License,是GPL补充,在GPL在此基础上增加了一些限制。
开源项目地址:https://github.com/taosdata/TDengine
TDengine的发展历程
- 2017年,陶思数据开始研发TDengine
- 2018年8月,TDengine第一款产品真正交给用户,从开始开发到推出可用产品大约需要一年半的时间
- 2019年7月12日,陶思数据正式宣布TDengine100%开源内核(存储和计算引擎)和社区版
- 2020年1月,陶思数据获取GGV等近千万美元Pre-A物联网大数据平台轮投资研发开源TDengine
- 2020年4月,陶思数据宣布完成1000多万美元的A轮融资,三个月内完成两轮1000万美元融资
TDengine的优势
- 10 性能提升倍以上:创新的数据存储结构定义,单核每秒至少可以处理 2 插入数百万个数据点,读取1000多万个数据点,比现有通用数据库快十倍以上。
- 硬件或云服务成本降至 1/5:由于超强的性能,计算资源不于一般大数据方案 1/5;通过列式存储和先进的压缩算法,存储不能占用通用数据库 1/10。
- 全栈时序数据处理引擎:集成数据库、消息队列、缓存、流式计算等功能,应用程序无需集成Kafka/Redis/HBase/Spark/HDFS 等软件,大大降低了应用开发和维护的复杂性成本。与第三方工具无缝连接:无需一行代码即可与第三方工具无缝连接 Telegraf, Grafana, Matlab, R 集成。后续将支持 MQTT, OPC, Hadoop,Spark等, BI工具也将无缝连接。
- 强大的分析功能:指定的时间范围可以查询十年前或一秒前的数据。数据可以聚合在时间轴上或多个设备上。即席查询可以通过 Shell, Python, R, MATLAB 随时进行。
- 高可用性和水平扩展:通过分布式架构和一致性算法,TDengine支持关键任务应用程序,确保高可用性和水平扩展性。
- 零运维成本、零学习成本:安装集群简单快捷,无需分库分表,实时备份。类似标准 SQL,支持 RESTful,支持 Python/Java/C/C /C#/Go/Node.js, 与 MySQL 相似,零学习成本。
- 核心开源:除一些辅助功能外,TDengine核心是开源。企业不再被数据库绑定。这使得生态更强大,产品更稳定,开发者社区更活跃。
TDengine的适用场景
TDengine原则上,所有使用机器、设备和传感器收集数据的地方都可以使用作基本软件。
一些典型场景如下:
- 公共安全:网络记录、电话记录、个人跟踪、区间筛选
- 电力行业:智能电表、电网、发电设备的集中监控
- 通信行业:电话费详细信息、用户行为、基站/通信设备监控
- 金融业:交易记录、访问记录、ATM、POS 机监测
- 旅行工具:实时监控火车/汽车/出租/飞机/自行车
- 交通行业:实时路况、交叉口流量监测、交叉口数据;
- 石油石化:油井、运输管道、运输队实时监控
- 互联网: 服务器/应用监控、用户访问日志、广告点击日志
- 物流行业:车辆、集装箱的追踪监测
- 环境监测:天气、空气、水文、地质环境监测;
- 物联网: 电梯、锅炉、机械、水表、气表等网络设备
- 军工行业:数据采集和存储各种军事装备
- 制造业: 生产过程控制、过程数据、供应链数据采集和分析
TDengine写入存储策略
1.单点写入
虽然序列数据量很大,但每个设备的数据源都是唯一的,因为不同的采集设备产生的数据过程是完全独立的。当一张桌子只有一个写入者时,自然不需要在锁机制上浪费资源。你知道,传统关系数据库的写入操作必须有锁保护。
Tdengine无锁写作可以节省大量资源,加快写作速度。
2.连续存储
其次,对于一个数据采集点来说,这是一个自然的排序数据结构,因为它产生的数据是时间顺序的。因此,后续写作的方式是有序的append(附加)实现,充分发挥硬盘性能,进一步提高数据写入速度。
3.超级表
TDengine每个设备对应一个表。但是,没有必要将设备地址号和其他信息写入磁盘。所以他们把很多表放在一起,变成了超级表,然后直接用地址号和其他信息进行筛选
4.列式压缩
TDengine使用列存储。由于列存储下每列的内容格式相近,有利于压缩和节省空间。此外,不同类型的数据将采用不同的压缩算法。然后是针对性压缩,然后是常规压缩所以最后写入硬盘的数据所占据空间会非常小。
TDengine的特点
- 专为物联网数据而设计,利用物联网数据时序性的特点,实现每个采集点对应一个表的这一功能。但其不适用于处理通用的互联网数据。
- 采用列式存储+压缩的方式,以节省硬件成本。(压缩效率高:利用物联网数据变化波动不大的特性、dif插值后压缩,然后二阶压缩,效率很高。)
- 支持高可用性,将每个物理节点划分为多个虚拟数据节点和虚拟管理节点。虚拟数据节点存储数据,虚拟管理节点管理MetaData。虚拟数据节点和虚拟管理节点分布在不同的物理节点上实现数据集应用的高可用。
- 存储结构上,采用每个采集点创建一个独立的表的方式来存储。这样实现每个采集点的数据的连续存放,提升读取效率。由于每个表的数据来源只有一个,能够实现无锁写入,提升写入速率。
- 针对多变的聚合,引入了超级表的概念。同一类型的采集设备可以创建一张超级表。在创建超级表时,可以对这类表指定标签,在查询的时候通过标签来对数据库中的表进行过滤,这样即使数据库中有非常多的表,也可以实现快速的多表聚合。
- 安装包非常小,安装使用简单。支持SQL,语法与MySQL类似。
了解更多
关于TDengine的更多了解(系统结构、存储结构、数据模型等介绍),可以去看看TDengine白皮书:https://www.taosdata.com/downloads/TDengine%20White%20Paper.pdf