CGFT《大数据技术原理与应用》中的数据模型的相关概念。HBase实际上就是一个稀疏、多维、持久化存储的映射表,它采用行键(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和时间截(Timestamp)进行索引,每个值都未经解释的字节数组byte[]。下面具体介绍HBase数据模型的相关概念。

1.表

HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。

2.行

每个HBase表都由若干行组成,每个行由行键(Row Key)来标识。访问表中的行只有3种方式:通过单个行键访问;通过一个行键的区间来访问;全表扫描。行键可以是任意字符串(*长度是64KB,实际应用中长度一般为10~100字节),在HBase内部,行键保存为字节数组存储时,数据按照行键的字典序排序存储。在设计行键时,要充分考虑这个特性,将经常一起读取的行存储在一起。

CGFT

3.列族

一个HBase表被分组成许多“列族”的集合,它是基本的访问控制单元。列族需要在表创建时就定义好,数量不能太多(HBase的一些缺陷使得列族数量只限于几十个),而且不要频繁修改存储在一个列族当中的所有数据,通常都属于同一种数据类型,这通常意味着具有更高的压缩率表中的每个列都归属于某个列族,数据可以被存放到列族的某个列下面,但是,在把数据存放到这个列族的某个列下面之前,必须首先创建这个列族。

在创建完成一个列族以后,就可以使用同一个列族当中的列。列名都以列族作为前级。

例如,courses:history和courses:math这两个列都属于courses这个列族。在HBase中,访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,我们可以借助列族上的控制权限帮助实现特定的目的,比如,我们可以允许一些应用能够向表中添加新的数据,而另一些应用则只允许浏览数据。HBase列族还可以被配置成支持不同类型的访问模式,比如,一个列族也可以被设置成放人内存当中,以消耗内存为代价,从而换取更好的响应性能

4.列限定符

列族里的数据通过列限定符(或列)来定位。列限定符不用事先定义,也不需要在不同行之间保持一致。列限定符没有数据类型,总被视为字节数组byte[]。

5.单元格

在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell)。单元格中存储的数据没有数据类型,总被视为字节数组byte[]。每个单元格中可以保存一个数据的多个版本,每个版本对应一个不同的时间藏。

6.时间截

每个单元格都保存着同一份数据的多个版本,这些版本采用时间截进行索引。每次对一个单元格执行操作(新建、修改、删除)时、HBase都会隐式地自动生成并存储一个时间藏。时间截一般是64位整型,可以由用户自己赋值(自己生成*时间裁可以避免应用程序中出现数据版本冲突),也可以由HBase在数据写入时自动赋值。一个单元格的不同版本是根据时间藏降序的顺序进行存储的,这样,*的版本可以被*读取。