投资菜地

屋后的一亩三分绿色菜园地

2020-06-04

时序数据库

TSDB

基本数据模型:

  1. Metric:指标名称
  2. Timestamp:时间戳
  3. Tags:维度组合
  4. Fields:指标值

相对关系型数据库的数据模型来说的区分:

  1. 必定含有时间字段
  2. 区分列的类型,需要用户将列划分为维度列和指标列。

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

  1. 得到metrics
  2. 得到tagkey
  3. 得到tagvalue
  4. 得到feilds

流程

Memory-based Index

Disk-based Index

倒排

内存

文件

开源项目(更多)