天天看點

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 * ( ( ++*n + (++) ) * )    // 最終機關 byte

從前到後的含義是:
num: rowkey的個數,也是行數
:  metric_name編碼長度
:  timestamp 編碼長度
:  tagK, tagV加起來編碼長度
n:  tagK,tagV KV對的個數
:  hbase family name 預設 "t", 認為一個byte存儲
:  列名的 編碼長度
:  metric的value值編碼長度(,,,),取最大的估算
: 在精度為秒的假設下,有秒
           

假設:

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)。

繼續閱讀