时序数据库
TSDB
基本数据模型:
- Metric:指标名称
- Timestamp:时间戳
- Tags:维度组合
- Fields:指标值
相对关系型数据库的数据模型来说的区分:
- 必定含有时间字段
- 区分列的类型,需要用户将列划分为维度列和指标列。
FSDB
创建Metric时需要指定过期时间。利用Tag Engine进行倒排,针对不同数据类型进行数据压缩
API
数据写入
metric{tags:values,…} { fields:values,… }@timestamp
元数据查询
$.showdb //得到FSDB中所有databases
$.use(dbname) //切换当前database
db.showMetrics //得到当前database中所有metrics
db.metrics.showTagSet //得到metric中所有tags和tagValues(TagSet)
流式查询
t1=> agg(metric.fields…{tags:values,…}[interval])
t1.fields…
所有操作都基于注对象,通过x=>可以重定义流对象,最后的流对象会输出为数据集。
写入
流程
所有到达服务器的数据首先写入WAL并保护在内存中,然后写入内存索引。
然后根据不同Level策略(当容量到达一定限制或者时间后)将低Level的数据合并到高Level的数据中。
WAL
防止数据丢失。
查询
TSI - TimeSeries Index
- 得到metrics
- 得到tagkey
- 得到tagvalue
- 得到feilds