1、简介
HBase是基于LSM树架构实现的,天生适合写多读少的应用场景。
LSM树本质上和B+树一样,是一种磁盘数据的索引结构。但和B+树不同的是,LSM树的索引对写入请求更友好。因为无论是何种写入请求,LSM树都会将写入操作处理为一次顺序写,而HDFS擅长的正是顺序写(且HDFS不支持随机写),因此基于HDFS实现的HBase采用LSM树作为索引是一种很合适的选择。LSM树的索引一般由两部分组成,一部分是内存部分,一部分是磁盘部分。内存部分一般采用跳跃表来维护一个有序的KeyValue集合。磁盘部分一般由多个内部KeyValue有序的文件组成。
2、keyvalue 存储格式
一般来说,LSM中存储的是多个KeyValue组成的集合,每一个KeyValue一般都会用一个字节数组来表示。这里,首先需要来理解KeyValue这个字节数组的设计。下面是hbase 的 rowkey 组成。
总体来说,字节数组主要分为以下几个字段。其中Rowkey、Family、Qualifier、Timestamp、Type这5个字段组成KeyValue中的key部分。
-
keyLen:占用4字节,用来存储KeyValue结构中Key所占用的字节长度。
-
valueLen:占用4字节,用来存储KeyValue结构中Value所占用的字节长度。
-
rowkeyLen:占用2字节,用来存储rowkey占用的字节长度。