块和KeyValue

2018-06-15 15:35 更新

块(Blocks)

StoreFiles由块(blocks)组成。块大小基于每个ColumnFamily进行配置。

压缩发生在StoreFiles中的块级别。有关压缩的更多信息,请参阅HBase中的压缩和数据块编码。

KeyValue

KeyValue类是HBase中数据存储的核心。KeyValue包装一个字节数组,并将偏移量和长度放入传递的数组中,指定将内容开始解释为KeyValue的位置。

字节数组中的KeyValue格式是:

  • keylength
  • valuelength
  • key
  • value

Key进一步分解为:

  • rowlength
  • row(即,rowkey)
  • columnfamilylength
  • ColumnFamily
  • columnqualifier
  • timestamp(时间戳)
  • keytype(键类型)(例如,Put,Delete,DeleteColumn,DeleteFamily)

KeyValue实例不会跨块拆分。例如,如果有8 MB的KeyValue,即使块大小为64kb,该KeyValue也会作为一个连贯的块读入。

示例

为了强调以上几点,请检查两行不同列Put同一行上发生的情况:

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

即使这些是针对同一行的,也会为每列创建一个KeyValue:

Put #1的关键部分:

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

Put #2的关键部分:

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

了解rowkey,ColumnFamily和列(又名columnqualifier)嵌入在KeyValue实例中是很重要的。这些标识符越长,KeyValue就越大。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号