塊和KeyValue

2018-06-15 15:35 更新

塊(Blocks)

StoreFiles由塊(blocks)組成。塊大小基于每個ColumnFamily進行配置。

壓縮發(fā)生在StoreFiles中的塊級別。有關(guān)壓縮的更多信息,請參閱HBase中的壓縮和數(shù)據(jù)塊編碼。

KeyValue

KeyValue類是HBase中數(shù)據(jù)存儲的核心。KeyValue包裝一個字節(jié)數(shù)組,并將偏移量和長度放入傳遞的數(shù)組中,指定將內(nèi)容開始解釋為KeyValue的位置。

字節(jié)數(shù)組中的KeyValue格式是:

  • keylength
  • valuelength
  • key
  • value

Key進一步分解為:

  • rowlength
  • row(即,rowkey)
  • columnfamilylength
  • ColumnFamily
  • columnqualifier
  • timestamp(時間戳)
  • keytype(鍵類型)(例如,Put,Delete,DeleteColumn,DeleteFamily)

KeyValue實例不會跨塊拆分。例如,如果有8 MB的KeyValue,即使塊大小為64kb,該KeyValue也會作為一個連貫的塊讀入。

示例

為了強調(diào)以上幾點,請檢查兩行不同列Put同一行上發(fā)生的情況:

  • Put #1: rowkey=row1, cf:attr1=value1
  • Put #2: rowkey=row1, cf:attr2=value2

即使這些是針對同一行的,也會為每列創(chuàng)建一個KeyValue:

Put #1的關(guān)鍵部分:

  • rowlength -----------→ 4
  • row -----------------→ row1
  • columnfamilylength --→ 2
  • columnfamily --------→ cf
  • columnqualifier -----→ attr1
  • timestamp -----------→ server time of Put
  • keytype -------------→ Put

Put #2的關(guān)鍵部分:

  • rowlength -----------→ 4
  • row -----------------→ row1
  • columnfamilylength --→ 2
  • columnfamily --------→ cf
  • columnqualifier -----→ attr2
  • timestamp -----------→ server time of Put
  • keytype -------------→ Put

了解rowkey,ColumnFamily和列(又名columnqualifier)嵌入在KeyValue實例中是很重要的。這些標識符越長,KeyValue就越大。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號