opentsdb学习

数据库设计

tsdb表,存放具体的时间序列数据
tsdb表设计

tsdb-uid表,存放metric、tagk、tagv与id之间的映射关系
tsdb-uid

上面这两个图非常重要,必须看懂。

基础知识

  • 数据查询
    查询数据时必须指定开始时间,若不指定结束时间,则默认查询到当前时间的数据

  • 聚合和采样
    聚合:将相同时间戳的多个时间序列值(metric)聚合(sum,avg,etc.)成一个值
    采样:将一段时间同一个时间序列值(metric)计算(sum,avg,etc.)成一个值。
    新数据的采样时间为当前时间mod采样周期,即timestamp%interval

  • 填充策略
    聚合或采样时,对于丢失的数据opentsdb默认采用线性插值法填充丢失的数据,也可以配置其他的填充策略,例如0,null,nan

  • 时间矫正
    opentsdb不对数据进行时间矫正,时间可以精确到毫秒,因此数据上传的时间戳是多少就保存为多少。

从OpenTSDB的处理上我们可以总结出一点:在处理时间序列数据时,如果系统中存在“理想的”“天然的”起哈希作用的字段应该优先考虑其作为rowkey的起始组成部分,后接时间字段,但如果找不到这样的字段再设置人工的哈希字段

HBASE

参考网址
HBASE的数据存储原则:
1) 需要一起访问的数据存储在一起。
比如一个月内某个metric的监控数据,集中保存在hbase的内部。

hbase meta表结构:
HBASE meta table

HDFS

HDFS数据以块存储,默认块大小64MB