HBase数据模型
在HBASE中,数据存储在具有行和列的表中。这是看起来关系数据库(RDBMS)一样,但将HBASE表看成是多个维 度的Map结构更容易理解
术语:
- 表(Table) : HBase中数据都是以表形式来组织的, HBase中的表由多个行组成
- 行键(row key):
- HBase中的行有一个rowkey(行键)和 一个或者多个列组成, 列的值与rowkey、列相关联
- 行在存储是按行键的字典序排序
- 行键的设计非常重要, 尽量让相关的行存储在一起
- 列(Column): HBase中的列有列族(column family) 和列限定符(列名)(Column Qualifier)组成
- 表示如下 : 列族名:列限定符 例如: C1:USER_ID C1:SEX
- 列族(Column Family):
- 出于性能原因, 列族将一组列及其值组织在一起
- 每个列族都有一组存储属性: 例如 是否应该换成在内存中, 数据如何被压缩等
- 表中的每一行都有相同的列族, 但在列族中不存储任何内容
- 所有的列族的数据全部都存储在一块(文件系统HDFS)
- Hbase官方建议所有的列族保持一样的列, 并且将同一类的列放在一个列族中
- 列标识符(Column Qualifier)
- 列族中包含一个个的列限定符, 这样可以为存储的数据提供索引
- 列族在创建表的时候是固定的, 但列限定符是不做限制的
- 不同的列可能会存在不同的列标识符
- 单元格(Cell): 单元格是行、列族和列限定符的组合,包含一个值和一个时间戳, 数据以二进制存储
- 版本号(verson num): 每条数据都会有版本号的概念
- 每条数据都可以有多个版本号, 默认值为系统时间戳, 类型为Long
- 时间戳(timeStamp): 每个数据都会有时间戳的概念
- 在向Hbase插入更新数据的时候, HBase默认会将当前操作的时间记录下来, 当然也可以人为指定时间
- 不同版本的数据按照时间倒序排序, 即最新的数据排在最前面