HBase中的prefix_tree

HBase中引进了两个数据层的压缩DataBlock compression和HLog compression
DataBlock compression
DataBlock compression是针对HFile V2中的DataBlock进行压缩,优点是可以节省磁盘开销,弊端是如果block中KV过多的话会导致系统开销比较大,同时有些场景的压缩后占用空间更大。
原理:
①使用前缀
向Block写入数据时,如果不是第一条数据会同前一条数据KEY(Key=Row+Family+Qualifier+Timestamp+Type)进行比较,同上一条数据相同的部分则不再写入(Byte)
 
结构:
 
HFIleV2未压缩结构:
  • KeyLength(4 bytes)
  • ValueLength(4 bytes)
  • RowLength(2 bytes)
  • Row
  • ColumnFamilyLength(1 bytes)
  • ColumnFamily+Column
  • timestamp(8 bytes)
  • type(1 bytes)

 
HFileV2压缩结构:
  • KeyLength(1~5 bytes)(7-bit encoding) 
  • ValueLength(1~5 bytes) (7-bit encoding) 
  • 同上个Key相同部分长度,(1~5 bytes) (7-bit encoding) 
  • 除相同前缀部分,剩余的Key 
  • Value


最坏情况会比原数据增加3B(7-bit会增加1B,3次会增加3B)

注:7-bit encoding
a、将int数据转换成32位
b、写入前八位
c、如果还有下八位则写入1,否则写入0结束(压缩为1B)
d、重复上述过程

0 个评论

要回复文章请先登录注册