TDengine 是一个专为物联网、车联网、运维监测等场景设计的时序数据库(Time Series Database,TSDB),它具有高性能、高可靠、高可用、低成本等特点。本文将简单介绍 TDengine 的存储模型,为什么要按块存储,为什么块内采用列式存储,这种存储模型带来的好处是什么?
TDengine 存储的数据包括采集的时序数据以及库、表相关的元数据、标签数据等。
TDengine 的存储模型是基于以下几个假设设计的:
- 时序数据具有高度结构化、极少更新或删除、写多读少、流量平稳、关注趋势而非细节、有保留期限等特征。
- 同一类型的数据采集点(如智能电表)具有相同的表结构和标签 schema,但每个采集点(表)的标签值是不同的。
- 用户对时序数据的查询分析一定是基于时间段和空间区域(如某个位置或分组)的。
- 用户除了需要存储和查询时序数据外,还需要进行各种统计和实时计算操作。
基于这些假设,TDengine 采用了以下几个设计原则:
- 按块存储:一个数据采集点的数据是以块为单位连续存储的。如果读取一个时间段的数据,它能大幅减少随机读取操作,成数量级的提升读取和查询速度。
- 块内列式存储:一个数据块内部,采用列式存储,对于不同数据类型,采用不同压缩算法,而且由于一个数据采集点的采集量的变化是缓慢的,压缩率更高。
- 超级表:由于一个数据采集点一张表,导致表的数量巨增,难以管理,而且应用经常需要做采集点之间的聚合操作,聚合的操作也变得复杂起来。为解决这个问题,TDengine 引入超级表(Super Table,简称为 STable)的概念。在 TDengine 的设计里,表用来代表一个具体的数据采集点,超级表用来代表一组相同类型的数据采集点集合。
综上所述,TDengine 的存储模型是针对物联网等场景下的时序数据特点而设计的,它利用了按块存储、列式存储、超级表等技术,实现了高效的存储和查询能力,同时也保证了数据的可靠性和可用性。TDengine 的存储模型为用户提供了一个简单、灵活、强大的方式来管理和分析海量的时序数据。