OpenTsdb 核心设计

RowKey设计

openTsdb的rowkey设计充分利用了HBase中索引信息仅在rowkey中的特点,它将指标metric,时间戳,数据值,tag标签名,tag标签值都包含在rowkey中,具体的设计如下图所示:

OpenTsdb 核心设计_第1张图片
如上图按照metric_name timestamp tagk tagv的顺序链接起来形成rowkey, 同时考虑到metric_name, tagk, tagv在连续不同时间存储的内容都是相同的,为了降低存储空间,这里对其进行了编码:metric_name, tagName, tagValue都用3 byte(默认)进行表示。如下具体实例:

[0, 0, -69, 77, 4, -99, 32, 0, 0, 1, 0, 1, 11, 0, 0, 2, 0, -7, 42]
 `-------'  `------------'  `-----'  `------'  `-----'  `-------'
 metric ID  base timestamp  name ID  value ID  name ID  value ID
                            `---------------'  `---------------'
                                first tag         second tag

Note

  1. 这样编码后,表示metric_name, tagName, tagValue的个数上限都是 2^24个,大约 16 million.如果不够的话,还可以更改编码长度。
  2. tag KV对的个数不能超过8个,同时注意保持经常查询的tag放在rowkey的前列
  3. 时间戳,可以精确到秒或者毫秒。在rowkey中的timestamp为整点时间:如果精度为秒,则最多有3600列;如果精度为毫秒,则最多有3600000列。
  4. 每行rowkey里的tag数量和类型尽量都相同。
  5. 具体的列名设计:

    • 秒级别的精度,2 byte表示
    • 12 bits: 相对rowkey中整点小时的delta, 最多 2^12 = 4096 > 3600, 足够使用
    • 4 bits: 标识
      • 1 bit: an integer or floating point,0表示整数,1表示浮点数
      • 3 bits: 标识数据值的长度:其长度必须是1、2、4、8。 000表示1个byte, 010表示2byte, 011表示4byte, 100表示8byte
    • 毫秒级别的精度,4 byte表示
    • 4 bits:十六进制的 1或者 F
    • 22 bits: 毫秒偏移
    • 2 bit: 保留
    • 4 bits: 标识
      • 1 bit: an integer or floating point,0表示整数,1表示浮点数
      • 3 bits: 标明数据的长度,其长度必须是1、2、4、8。 000表示1个byte, 010表示2byte, 011表示4byte, 100表示8byte

表设计

根据上面的设计,最终在HBase中得表逻辑视图如下:
OpenTsdb 核心设计_第2张图片

你可能感兴趣的:(大数据-OpenTSDB)