TDengine 白皮书 要点
所属分类 TDengine
浏览量 590
https://www.taosdata.com/downloads/TDengine%20White%20Paper.pdf
物联网
时序数据
带时间戳 结构化 极少更新或删除操作 不需要事务 写多读少
用户关注的是一段时间的趋势,而不是某一特点时间点的值
数据有保留期限
数据的查询分析基于时间段和地理区域等
除存储查询外,需要各种统计和实时计算操作
数据量大
传统的关系型数据库 NoSQL数据库
列式存储 压缩算法
数据库、消息队列、缓存、流式计算等功能融合
一个数据采集点一张表 对每个数据采集点单独建表
单个采集点的数据 连续存储 顺序读写
写入无锁
超级表 Super Table STable
某一特定类型的数据采集点的集合
同一类型的数据采集点,其表的结构是完全一样的,
但每个表(采集点)的静态属性(标签)不一样
采集点之间的聚合操作
表代表一个具体的数据采集点
超级表代表一组相同类型的数据采集点
为某个具体数据采集点创建表时,使用超级表的定义做模板,同时指定该具体采集点(表)的标签值
存储结构
内存 行存储 SkipList 建立索引
持久化存储 ,列式存储
一个采集点的数据 在块内 顺序存储
块大小可配置
block range index
taosc
写入数据
内存写入
WAL
slave vnode
内存 flush 写入磁盘
master vnode
写入数据时,先将数据点写入 WAL 日志,然后转发给其他副本
当内存的剩余空间达到临界值时, 内存数据写入硬盘
内存 先进先出的队列 ,保证最新采集的数据在内存里
数据写入硬盘是以添加日志的方式进行的
为避免合并操作,每个采集点(表)的数据也是按块存储,
在一个块内,数据点是按列连续存放的,但块与块之间可以不是连续的
对每张表会维护一索引,保存每个数据块在文件中的偏移量,起始时间、数据点数、压缩算法等信息
数据分区
每个数据文件仅仅保存固定一段时间的数据(比如一周,可配置)
一个表的数据会分布在多个数据文件中
查询时,根据给定的时间段,计算出查找的数据在哪个数据文件,然后读取
多个数据文件的设计还有利于同步、恢复、自动删除操作,
更有利于数据按照新旧程度在不同物理介质上存储
一个表的数据虽然会按时间段分区,但不会跨节点存储,以便于单张表的快速高效的插入、查询和计算
数据节点 dnode
dnode 包含零到多个逻辑的虚拟节点(vnode),零或者至多一个逻辑的管理节点(mnode)
虚拟节点组 异步复制
虚拟管理节点
负责所有节点运行状态的采集、节点的负载均衡,以及所有 MetaData 的管理,包括用户、数据库、表的管理
插入或查询一张表时,获取表所在的数据节点
Master-Slave 同步复制
虚拟管理节点集群的创建是完全自动的,无需任何人工干预
taosc 驱动程序(driver),负责处理应用与集群的接口交互,内嵌于 JDBC、或者 C、Python、Go 语言连接库里
负责获取并缓存元数据
将插入、查询等请求转发到正确的数据节点
把结果返回给应用时,还需要负责最后一级的聚合、排序、过滤等操作
数据分片、水平扩展
采用虚拟数据节点的设计对数据进行分片
一个虚拟数据节点包含多个表,表的数量可以配置
根据其计算和存储资源,一个数据节点将被划分为多个虚拟数据节点。
当用户添加一个表时,管理节点将根据当时的资源情况、每个节点的负载情况,
决定是否在现有的虚拟数据节点里创建,还是需要新建一个虚拟数据节点。
管理节点负责整个系统的负载均衡,虚拟数据节点的增加、删除、迁移、合并与拆分。
高可靠性
Replication Factor
虚拟节点组 各个虚拟数据节点通过心跳包实时知道对方的状态
当一台主机重启时,每个虚拟数据节点都会检查自己数据的版本是否与其他虚拟节点一致,
如果版本不一致,需要同步后才能进入对外服务状态
在运行过程中,由于各种原因,数据仍然可以失去同步,
这种不同步会在收到转发的写入请求时被发现,一旦被发现,版本低的虚拟数据节点将马上停止对外服务,
进入同步流程,同步完后,才会重新恢复对外服务。同步过程中,高版本的节点还可以正常的对外提供服务。
TAOSC 将必要的 Meta 数据都会缓存在本地,只有当需要的 Meta 数据不存在或失效的情况下,才会访问管理节点
多表聚合
超级表
create table m1(ts timestamp, pressure int, rpm int) tags (model binary(8), color binary(8))
STable m1, 带有标签 model 和标签 color
create table t1 using m1 tags (‘apple’, ‘red’)
基于标签对 STable 进行各种聚合查询或统计
select avg(pressure) from m1 where model=’apple’ interval(5m) group by color
对于 STable 的查询操作,完全与普通的表一样
但一个定义的 STable 可以包含多张表(多个数据采集点)
可通过指定标签的过滤条件,对一个 STable 下的全部或部分表进行聚合或统计操作
1 应用将一个查询条件发往系统
2 taosc 将超级表的名字发往 Meta Node(管理节点)
3 管理节点将超级表所拥有的 vnode 列表发回 taosc
4 taosc 将计算的请求连同标签过滤条件发往这些 vnode 对应的多个数据节点
5 每个 vnode 先在内存里查找出自己节点里符合标签过滤条件的表的集合,然后扫描存储的时序数据,完成相应的聚合计算,将结果返回给 taosc
6 taosc 将多个数据节点返回的结果做最后的聚合并返回
实时流式计算
Avg:以每个采样时间范围内的 value 的平均值作为结果
Dev:以每个采样时间范围内的 value 的标准差作为结果
Count:以每个采样时间范围内的点的数目作为结果
First:以每个采样时间范围内的第一个 value 作为结果
Last:以每个采样时间范围内的最后一个 value 作为结果
LeastSquares:对每个采样时间范围内的 value 进行最小二乘法的拟合
Max:以每个采样时间范围内的 value 的最大值作为结果
Min:以每个采样时间范围内的 value 的最小值作为结果
Percentile:每个采样时间范围内的 value 的第 p 百分位数作为结果。
Sum:以每个采样时间范围内的 value 的总和作为结果
Diff:以每两个相邻的 value 的差值作为结果
Div:以每个 value 除以一个除数作为结果
Scale:以每个 value 乘以一个倍数作为结果
基于多个采集点数据的四则运算表达式
Sliding Window
create table d1 as select avg (pressure) from t1 interval (60s) sliding(10s)
参数指标
数据类型:tinyint, smallint, int, bigint, float, double, binary, nchar, bool
单记录最大长度:16K 字节
最大记录条数:仅受存储空间限制
最大表的个数:仅受节点个数限制
最大数据备份数:5 份
单节点插入速度:2 万条/秒(单核,16 字节每记录,每次一条,无同步备份)
单节点查询速度:2000 万条/秒(单核,16 字节每记录,全内存)
上一篇
下一篇
go mod package 实例
go依赖查看
netty异步机制
杭州爬山路线
杭州跑步徒步路线
西湖骑行路线