OpenTSDB原理系列 資料表設計

2021-09-12 12:27:19 字數 2442 閱讀 7548

metrics資料的hbase rowkey中包含主要組成部分為:鹽值(salt)、metrics名稱、時間戳、tagkey、ta**alue等部分。上篇文章已經講到,為了統一各個值的長度以及節省空間,對metrics名稱、tagkey和ta**alue分配了uid資訊。所以,在hbase rowkey中實際寫入的metrics uid、tagkey uid和ta**alue uid。

hbase rowkey的資料模型如下圖所示:

qualifier用於儲存乙個或多個datapoint中的時間戳、資料型別、資料長度等資訊。

由於時間戳中的小時級別的資訊已經儲存在rowkey中了,所以qualifier只需要儲存乙個小時中具體某秒或某毫秒的資訊即可,這樣可以減少資料占用的空間。

乙個小時中的某一秒(少於3600)最多需要2個位元組即可表示,而某一毫秒(少於3600000)最多需要4個位元組才可以表示。為了節省空間,opentsdb沒有使用統一的長度,而是對特定的型別採用特性的編碼方法。qualifer的資料模型主要分為如下三種情況:秒、毫秒、秒和毫秒混合。

當opentsdb接收到乙個新的datapoint的時候,如果請求中的時間戳是秒,那麼就會插入乙個如下模型的資料。

判斷請求中的時間戳為秒或毫秒的方法是基於時間戳數值的大小,如果時間戳的值的超過無符號整數的最大值(即4個位元組的長度),那麼該時間戳是毫秒,否則為秒。

當opentsdb接收到乙個新的datapoint的時候,如果請求中的時間戳是毫秒,那麼就會插入乙個如下模型的資料。

當同一小時的資料發生合併後,就會形成混合型別的qualifier。

合併的方法很簡單,就是按照時間戳順序進行排序後,從小到大依次拼接秒型別和毫秒型別的qualifier即可。

hbase value部分用於儲存乙個或多個datapoint的具體某個時間戳對應的值。

由於在qualifier中已經儲存了datapoint value的型別和datapoint value的長度,所以無論是秒級還是毫秒級的值,都可以用相同的表示方法,而混合型別就是多個datapoint value的拼接。

hbase value按照長度可以分為如下幾種型別:

當datapoint value為long型,且大於等於-128(byte.min_value),且少於或等於127(byte.max_value)的時候,使用1個位元組儲存。

當datapoint value為long型,且大於等於-32768(short.min_value),且少於或等於32767(short.max_value)的時候,使用2個位元組儲存。

當datapoint value為long型,且大於等於0x80000000(integer.min_value),且少於或等於0x7fffffff(integer.max_value)的時候,使用4個位元組儲存。

當datapoint value為long型,且不是上面三種型別的時候,使用8個位元組儲存。

當datapoint value為float型的時候,使用8個位元組表示。

按照時間戳的順序,把多個value拼接起來的資料模型如下:

annotation用於描述某乙個時間點發生的事件,annotation的資料為字串型別,這與數字型別的metrics資料並不同。

注意:

annotation資料只支援秒級時間戳的資料。

annotation資料不會合併。

rowkey的資料模型如下圖:

由於注釋資料只支援秒級型別的資料,同時注釋型別的資料不支援合併,所以qualifier的設計相對metrics資料簡單一些。qualifier定義如下:

注釋資料中的value儲存的是字串型別的資料,整個hbase value部分就是注釋資料的值。

注意:

標誌位: 由第1個位元組表示,而且值必須為0x05。即(qualifier & 0xff0000)>>>16 == 0x05

value的資料結構如下:

OpenTSDB原理系列 元資料模型

本文作為介紹opentsdb原理系列文章的第一篇,主要介紹了時序資料以及opentsdb的一些基礎概念,以及opentsdb中的元資料模型定義。wiki中關於 時間序列 time series 的定義 時間序列 time series 是一組按照時間發生先後順序進行排列的資料點序列,通常一組時間序列...

OpenTSDB原理系列 讀取流程

乙個完整的opentsdb http query請求,分別由opentsdb i o thread和asynchbase i o thread完成。opentsdb i o thread執行緒負責處理http query請求,asynchbase i o thread負責處理hbase的響應並傳送h...

Oracle 11g系列 資料表物件

oracle資料庫的下一層邏輯結構並非資料表,而是表空間。每個資料表都屬於唯一的表空間。1 oracle表空間 與資料表相同,oracle表空間是乙個邏輯物件,而非物理物件,是資料庫的組成部分。當使用sql語句對資料庫進行操作時,操作的都是邏輯物件,而非直接操作物理檔案。乙個資料庫可以有多個表空間,...