OpenTSDB 存储容量估算 以及 建表方式

容量估算

根据 Rowkey以及表设计,进行存储容量估算的方式,大致如下:
rowkey: metric_name + ts + tag_name + tag_value …..

确定metric_name的个数: m
确定tag_name: tag1 tag2 tag3 tag4….tagN
确定tag_value的个数: t1 t2 t3 t4 ….tn
(假设每个metric的tag数量和类型一样,实际也应该保证)

在一个小时内rowkey的个数计算公式: m * t1 * t2 * t3 ..... * tn = num

假设一个小时内,每秒都在写数据,则在一个小时内存储占用空间为:

num * ( ( 3+4+6*n + (1+2+8) ) * 3600)    // 最终单位 byte

从前到后的含义是:
num: rowkey的个数,也是行数
3:  metric_name编码长度
4:  timestamp 编码长度
6:  tagK, tagV加起来编码长度
n:  tagK,tagV KV对的个数
1:  hbase family name 默认 "t", 认为一个byte存储
2:  列名的 编码长度
8:  metric的value值编码长度(1,2,4,8),取最大的估算
3600: 在精度为秒的假设下,有3600

假设:
200 个metric
3 个tagKV对, 每个tagV的取值个数分别为: 1000 20 5
每10秒采集一次数据
则一个小时内占用的最大存储空间为:
200 * 1000 * 20 * 5 * ((3+4+6*5+1+2+8) * 360) = 321 GB

这个是假设每个机器都是全量采集的估值,实际中可能没这么大。
PS:以上是我根据对OpenTSDB的了解做出的一个大概的估算方式,可能有不对的地方,如果发现有错误的地方,后续会进行纠正。

建表方式

需要根据实际的metric等信息确定,后续补上(主要是hbase Region预分区和是否在rowkey上加salt)。

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