。TDengine 涛思数据库,时序型数据库
。物联网各种设备产生的大量实时数据存储,对这些海量数据进行大数据的计算分析,生成各种维度的分析报表,帮助企业对业务预测和预警,并进行科学决策和节约成本。
。物联网各种设备产生的数据特征:
1.数据是时序的,并带有时间戳;
2.已经存储的数据极少更新和删除操作;
3.相对于互联网应用,写多读少;
4.数据量巨大;
5.除查询操作外,还有各种统计和实时计算的操作;
6.分析计算的数据往往是对某一个时间段或者地理区域的数据进行操作,而不是针对某个时间点的值。
。因为需要写入的数据量巨大,如果使用传统的关系型数据库或者nosql数据库,没有结合物联网数据的特征,很容易因为写入性能限制,查询分析很慢,但如果通过存储集群来提高性能和计算,又增加运营和维护成本。TDengine就是根据物联网大数据特征,结合传统关系型数据库+nosql数据库+流式计算引擎+消息队列的优点开发的时序型数据库。
。主要优势:1.创新的数据库解构,单核每秒处理2万次请求,插入数百万个数据点,读取一千万以上的数据点,比现有的通用数据库快10倍;
2.同样的计算,需要消耗的计算资源仅通用大数据方案的1/5。通过列式存储和先进的压缩算法,存储空间仅通用数据库的1/10;
3.强大的分析功能,指定时间段后,可同时查询出多个设备上的数据进行聚合;
4.安装维护简单,无需分库分表,实时备份,类似mysql,上手简单。
。TDengine采用列式存储,将每个采集节点的数据作为数据库中的一张独立表并根据时序列式存储。所以对于一个采集点而言,无论存在内存还是硬盘上,都是连续存储的,减少了随机读取操作、IO操作次数。每个采集点的数据都是独立的表,和独立的设备写入,所以无需锁表,并且因为单表的数据都是根据时序列式存储,后续产生的数据也都是追加写入,因此可以大幅提升写入的速度。
。TDengine存储实现原理:
-->有数据需要写入
-->先将数据点(设备信息)写到commit log,commit log保存在磁盘中
--->通过commit log中比对后,再将数据分配到标记有同一数据点的内存块,并将数据按列写入内存块。当内存块的剩余空间达到预设值或者达到预设的commit提交时间后,将内存块中的数据写入硬盘。数据块固定大小16K,一个采集点(一个设备)可以分配多个内存块,采用LRU策略管理。一个内存块中的数据是按时序连续存放的,但数据块与数据块是不连续的(内存中的索引会保存每个采集点对应哪几个内存块,每张表(每个设备)维护一个索引)。
-->内存块中的数据是按日志的方式写入磁盘,每个采集点的数据写入磁盘的时候也是按块存储,跟内存块一样,每个采集点的数据也是在块中连续存储,同一个采集点的多个数据块可以是不连续的,索引中会保存每张表的每个数据块在文件file中的位置信息/时间信息/压缩算法信息。因此一张表(设备)的数据可以分布在多个数据块中,多个数据块有可能分布在多个数据文件file中。
-->根据给定的时间段查询时,会先根据内存中索引查找出相应的数据文件,再查找出相应的数据块,然后读取出数据,这样大幅减少磁盘操作的次数。将随机读取的次数几乎为0,从而大幅提升了写入和查询的效率。
PS: 一个虚拟节点内的所有表在同一个时间段的数据存储在同一个数据文件file里,因此每个采集点(每张表)的数据可能存储在多个虚拟节点,即可能存储在多个数据文件中。

















