Hbase数据模型
HBase 以表的形式存储数据。表由行和列族组成。列划分为若干个列族(row family),
其逻辑视图如下:
几个关键概念:
1) 行键(RowKey)
行键是字节数组, 任何字符串都可以作为行键;
表中的行根据行键进行排序,数据按照 Row key 的字节序(byte order)排序
存储;
所有对表的访问都要通过行键 (单个 RowKey 访问,或 RowKey 范围访问,
或全表扫描)2) 列族(ColumnFamily)
CF 必须在表定义时给出
每个 CF 可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定
义时给出,新的列族成员可以随后按需、动态加入
数据按 CF 分开存储,HBase 所谓的列式存储就是根据 CF 分开存储(每个
CF 对应一个 Store),这种设计非常适合于数据分析的情形
3) 时间戳(TimeStamp)
每个 Cell 可能又多个版本,它们之间用时间戳区分
4) 单元格(Cell)
Cell 由行键,列族:限定符,时间戳唯一决定
Cell 中的数据是没有类型的,全部以字节码形式存储
5) 区域(Region)
HBase 自动把表水平(按 Row)划分成多个区域(region),每个 region 会保
存一个表里面某段连续的数据;
每个表一开始只有一个 region,随着数据不断插入表,region 不断增大,当
增大到一个阀值的时候,region 就会等分会两个新的 region;
当 table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被
保存在多个 Region 上。
Region 虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个 Store 组成,每个 store 保存一个 columns family;每个Strore 又由一个 memStore 和 0 至多个 StoreFile 组成,StoreFile 包含 HFile;memStore 存储在内存中,StoreFile 存储在 HDFS 上。