目录
HBase数据模型
概念
描述
- HBase 是一个稀疏的、分布式、持久、多维、排序的映射,它以行键(row key),列簇(columnFamily),列名(Column Qualifier)和时间戳(timestamp)为索引。
图解
注意
- 1、MySQL使用 行+ 列 定位数据
- 2、HBase类似于坐标系(x,y,z),多维定位数据
- 3、HBase 列簇、列名、时间戳,面向列进行存储
数据结构内容
NameSpace 命名空间 | 数据库
-
注意
-
1、命名空间是类似于关系数据库系统中的数据库的概念,他其实是***表的逻辑分组***。这种抽象为多租户相关功能奠定了基础。
-
2、命名空间是可以管理维护的,可以创建,删除或更改命名空间
-
3、HBase有两个特殊预定义的命名空间:
- 1、default - 没有明确指定名称空间的表将自动落入此名称空间
- 2、hbase - 系统命名空间,用于包含HBase内部表
-
-
描述
- 1、为了保护我们的表,所采用的更高层次的单位
- 2、表的逻辑分组
Table 表
-
描述
- 1、存储相同数据的一个逻辑单元
- 2、Hbase的table由多个行组成,行有很多列组成
- 3、HBase是一个半结构的数据库,所以每一行的列都有可能是不同
-
图文
RowKey 主键
-
注意
- 1、RowKey 是用来检索记录的主键,是一行数据的唯一标识
- 2、RowKey行键 (RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10-100bytes),RowKey以字节数组保存。
- 3、存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。
-
描述
- 1、可以理解为一行数据的主键
- 2、HBase按照列进行存储,所以我们查询数据的时候会看到很多RowKey相同的列
- 3、RowKey可以看做成主键:最多可以有64K字节组成,一般为 10~40 个字节即可
- 将来设计 RowKey 是 HBase 使用的重中之重
- 4、RowKey 存储的时候默认以字典序排序
Column Family 列簇
-
注意
- 1、列簇在物理上包含了许多的列与列的值,每个列簇都有一些存储的属性可配置
- 例如是否使用缓存,压缩类型,存储版本数等。在表中,每一行都有相同的列簇,尽管有些列簇什么东西也没有存。
- 2、将功能属性相近的列放在同一个列簇,而且同一个列簇中的列会存放在同一个Store中
- 3、列簇一般需要在创建表的时候就进行声明,而且一般一个表中的列簇数不要超过3个
- 这个和后期的优化相关
- 4、列隶属于列簇,列簇隶属于表
- 1、列簇在物理上包含了许多的列与列的值,每个列簇都有一些存储的属性可配置
-
描述
- 1、可以理解为多个列的集合
- 2、方便队列进行查找和管理
- 3、一个表的列簇需要在使用前声明(创建表,后期维护表)
- 4、列隶属于列簇,列簇隶属于表
- 5、一个表中列簇是固定的,但是列簇中列是不固定的
Column Qualifier 列
-
注意
- 1、列簇的限定词,理解为列的唯一标识。
- 但是列标识是可以改变的,因此每一行可能有不同的列标识
- 2、使用的时候必须 列簇:列
- 3、列可以根据需求动态添加或者删除,同一个表中不同行的数据列都可以不同
- 1、列簇的限定词,理解为列的唯一标识。
-
描述
- 1、一个列簇中的列是不固定的
- 2、又肯有的数据行一个列簇中有3个列,有的行相同列簇有8个列
Timestamp 数据版本
-
注意
- 1、通过rowkey和column family,column qualifier确定的一个存贮单元通过时间戳来索引。
- 时间戳的类型是 64 位整型
- 默认时间戳是精确到毫秒的当前系统时间。
- 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
- 2、每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面
- 查询数据的时候,如果不指定版本数,默认显示版本号最新(高)的数据
- 3、为了避免数据存在过多版本中造成管理 (包括存贮和索引)负担,HBASE 提供了两种数据版本回收方式。
- 一是保存数据的最后n个版本
- 二是保存最近一段时间内的版本(比如最近七天)。
- 1、通过rowkey和column family,column qualifier确定的一个存贮单元通过时间戳来索引。
-
描述
- 默认就是时间戳,解决HDFS不能随时修改数据的弊端
- 默认数据版本就是时间戳
- 查询数据的时候默认显示最新的数据
Cell 数据
-
注意
- 1、Cell是由row,column family,column qualifier,version 组成的
- 2、cell中的数据是没有类型的,全部是字节码形式存贮。
- 因为HDFS上的数据都是字节数组
-
描述
- row,column family,column qualifier,version 所有的数据都是字符串