HBase 表存储结构
1,HBase 表逻辑视图
- 表的形式存储数据,表由行和列组成。列划分为若干个列簇 (Column Family)。
2,HBase 表结构组成
-
1,行键(RowKey)
- 作用:用来检索记录的主键
- 访问 HBase 表中的行,有三种方式:
通过单个 RowKey 访问
通过 RowKey 的 range(正则)
全表扫描 - 可以是任意字符串。在 HBase 内部, RowKey 保存为字节数组(byte[])。
最大长度是 64KB,实际应用中一般为10-100bytes
- 存储时,表中数据按照 RowKey 排序(字典顺序)
设计key时,利用排序存储这个特性,将经常一起读取的行放到一起。
-
2,列簇(Column Family)
- 列簇包含列,列簇是表的 schema 的一部分(而列不是),必须在使用表之前定义
- 列名都以列簇作为前缀。
例如:courses:history,courses:math 都属于 courses 这个列簇
- 尽量不要设置过多列簇
因为列簇越多,在取一行数据时所要参与 IO、搜寻的文件就越多
-
3,时间戳(TimeStamp)
-
可以通过 row 和 columns 确定一个存储单元(Cell),每个 Cell 都保存着同一份数据的多个版本。
-
类型:64 位整型
HBase(在数据写入时自动)赋值,此时间戳是精确到毫秒的当前系统时间,可以避免数据版本冲突,具有唯一性。
客户显式赋值 -
顺序:每个 Cell中,不同版本的数据按照时间戳降序排序,即最新的数据排在最前面。
-
数据版本回收方式(避免数据存在过多版本造成管理(包括存储和索引)负担)
1,保存数据的最后 n 个版本
2,保存最近一段时间内的版本(设置数据的生命周期 TTL)
可以针对每个列簇进行设置
-
-
4,单元(Cell)
- 由{RowKey, column( = +
- Cell 中的数据是没有类型的,全部是字节码形式存储。
-
5,版本(Version)默认为1
- 有很多单元(Cell)的行和列是相同的,使用版本来区分不同的单元
- 类型:用一个长整型表示
- 顺序:按照时间戳降序排列,因此当读取这个文件的时候,最先找到的是最近的版本
3,HBase 表的特点
- (1)大
- (2)面向列: 面向列(簇)的存储和权限控制,列(簇)独立检索。
- (3)稀疏:对于为空(null)的列,并不占用存储空间。
- (4)无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
- (5)数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
- (6)数据类型单一:HBase 中的数据都是字符串,没有类型。