HBase-存儲-KeyValue格式
本質上,HFile中的每個KeyValue都是一個低級的字節數組,它允許零復制訪問數據。
KeyValue格式如下
該結構以兩個分別表示鍵長度(Key Length)和值長度(Value Length)的定長數字開始。有了這個信息,用戶就可以在數據中跳躍,例如,可以忽略鍵直接訪問值。其它情況下,用戶也可以從鍵中獲取必要的信息。一旦其被轉換成一個KeyValue的Java實例,用戶就能通過對應的getter方法得到更多的細節信息。
上圖中,平均鍵比平均值大的原因可以歸結為鍵中包含的數據項:它包含了指定單元的全維度內容。鍵包含了行鍵、列族名和列限定符等。相對於一個較小的有效負載,這將導致相當巨大的開銷。如果用戶處理的值較小,那么應當保持鍵盡量小。選擇一個短的行和列鍵(列族名是一個單字節,同時列限定符也一樣短)來保證鍵值比率合適。
另一方面,壓縮有助於緩解這一問題,因為它着眼於有限的數據窗口,並且其中所有重復的數據都能夠被有效地壓縮。存儲文件中所有的KeyValue都被有序地存儲,這樣有助於把類似的鍵放在一起。