一篇文章让你全面了解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日,涛思数据正式宣布将TDengine的内核(存储和计算引擎)以及社区版100%开源
- 2020年1月,涛思数据获GGV等近千万美元Pre-A轮投资,研发开源的物联网大数据平台TDengine
- 2020年4月,涛思数据宣布完成超过1000万美元的A轮融资,三个月内完成两轮千万美元融资
TDengine的优势
- 10 倍以上的性能提升:定义了创新的数据存储结构,单核每秒能处理至少 2 万次请求,插入数百万个数据点,读出一千万以上数据点,比现有通用数据库快十倍以上。
- 硬件或云服务成本降至 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