OpentTsdb官方文檔中文版----存儲

&nmsp;OpenTSDB目前支持Apache HBase作爲其主要的存儲後端。截止版本2.3,OpenTSDB也可以使用Google雲上的Bigtable。選擇下面的HBase鏈接以存儲架構或Bigtable以查找用於雲中的配置和設置。

HBase Schema

Data Table Schema

  OpenTSDB的所有數據點都保存在一個獨立的,默認命名爲tsdb的海量表中。它利用了HBase排序和region分佈優勢。所有的值都存儲在列族t中。
  Row Key – Row key是由一個可選的鹽值,metric UID,時間戳,以及tagk/v對的UID組成的字節數組:[salt]<metric_uid><timestamp><tagk1><tagv1>[…<tagkN><tagvN>]。默認情況下,UID是3個字節編碼。
  自OpenTSDB 2.2版本啓用salting特性,第一個字節(或者多個字節)是一個哈希鹽值ID以便在多個regions或region servers上更好地分佈數據。
  時間戳部分是以4個字節編碼以秒爲單位的Unix epoch值。每個小時一行,由每行中的時間戳反映。因此每個時間戳將會標準化(歸一化)到hour的值,例如:2013-01-01 08:00:00。這是爲了避免在單行中填充太多的數據點,因爲這會影響region的分佈。另外,由於HBase 對Row Key進行排序,同一個指標和時間段的數據,但具有不同標籤的數據也將會被組合在一起以便進行高效查詢。(不同標籤組合在一起,是指同一個Region?)
  沒有鹽值的示例row key,以16進製表示如下:

00000150E22700000001000001
00000150E22700000001000001000002000004
00000150E22700000001000002
00000150E22700000001000003
00000150E23510000001000001
00000150E23510000001000001000002000004
00000150E23510000001000002
00000150E23510000001000003
00000150E24320000001000001
00000150E24320000001000001000002000004
00000150E24320000001000002
00000150E24320000001000003

  where

00000150E22700000001000001
'---------''-----------''---------''--------'
metric    time    tagk  tagv

  這代表了一個單一的指標,而是3個小時的4個時間序列。請注意一個時間序列由兩組標籤:

00000150E22700000001000001000002000004
'---------''-----------''---------''--------''---------''---------'
metric    time    tagk  tagv   tagk  tagv

  標籤名稱(tagk)在存儲之前按照字幕順序排序,所以在rowkey/TSUID中host標籤將始終出現在owner之前。
數據點列
  到目前爲止,最常見的列數據點。這些是數據發送到TSD進行存儲時記錄的實際值。
  Column Qualifier – qualifier有2個或4個字節組成,這些字節對行的基準時間的偏移以及確定此值是integer或者decimal(十進制)值的標識進行編碼。Qualifier對行基準時間的偏移量以及存儲的數據的格式和長度進行編碼。
  具有2個字節Qualifier的列是以秒爲單位的偏移。Qualifier的前12位(bit)代表一個integer,它是row key中時間戳的增量。例如,如果row key歸一化爲1292148000 ,在1292148123時刻來了一個數據點,則記錄的增加將爲123。最後4位(bit)是格式標識。
  具有4個字節Qualifier的列是以毫秒爲單位的偏移。Qualifier的前4位(bit)將會置爲十六進制的1或F。接下來的22位(bit)編碼offset爲一個unsigned integer。接下來的2位(bit)保留,最後4位(bit)是格式標識。
  任一列類型的最後4位(bit)描述存儲的數據。第一位是一個標識,指示該值是整數還是浮點數。值0標識一個整數,1表示一個浮點數。最後3位(bit)表示數據的長度,偏移量1。值000表示1字節值,而010表示2字節值。長度必須反映1,2,4或8中的值。其他任何內容都表示出現錯誤。
  例如:0100表示列值是一個8字節的有符號整數。1011表示列值是一個4字節浮點值。因此在1292148123 時刻的Qualifier的數據點將具有整數值4294967296 ,將會有0000011110110100 或十六進制07B4的Qualifier。
  Column Values – 由Qualifier標識指定的1到8個字節編碼。
測試示例:

{"metric":"sys.cpu.system","tags":{"host":"web02","dc":"lax"},"timestamp":1525336162539,"value":4}
查詢結果:
RowKey{metricUid='1', metricName='sys.cpu.system', ts=1525334400, datetime='2018-05-03 16:00:00', tags=[TagPair{tagKUid='1', tagK='host', tagVUid='3', tagV='web02'}, TagPair{tagKUid='2', tagK='dc', tagVUid='6', tagV='lax'}]}
family: t   qualifier: f6b93ac0  value: 4
計算:
0xf6b93ac0 = 1111 0110 1011 1001 0011 1010 1100 0000(二進制)
前4bit:1111
22bit: 0110 1011 1001 0011 1010 11 = 1762539(十進制)
最後4bit:0000
因此: 時間戳 = 1525334400*1000 + 1762539 = 1525336162539
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章