HBase数据模型
RowKey行键
- 是数据的唯一标识 --- 类似于关系型数据库的主键
-
- 默认由64K的数据组成,但是实际使用中按照用户的需求自由定义
-
- 分配空间的时候使用多少分配多少,但是rowkey设计的时候够用就行
------ 后期专门将rowkey的设计策略
-
- 当我们插入数据的时候,HBase会按照Rowkey的字典序给我们排序
------ HBase中的数据默认按照rowkey有序
------ 注意字典序的排序规则
TimeStamp 时间戳
- 数据的版本控制器
-
- 时间戳的类型是 64位整型
-
- 它是基于HDFS存储的一种策略
------ 版本就是缓解了HDFS与数据修改的冲突
------ 现在修改数据删除数据并不会马上修改HDFS上的数据
- 我们定义列族的时候可以指定最多保留的版本
------ 将来我们修改同一个数据的时候,根据版本数来确定这个数据是否显示
------ 默认的版本号就是当前系统的毫秒数
- 我们查询数据的时候,如果不指定版本数,默认显示版本号最新(高)的数据
-
- 于是我们取数据的时候,不同的版本信息对应的数据有可能就是不同的
-
- 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
-
- 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
Column Family 列族
- 将功能属性相近的放在同一个列族
-
- 同一个列族中的列会存放在同一个Store中
-
- 列族一般需要在创建表的时候就进行声明,而且一般一个表中的列族数不要超过3个
-
- 表中所有的列都是基于列族
-
- 权限控制、存储以及调优都是在列族层面进行的
-
- HBase把同一列族里面的数据存储在同一目录下,由几个文件保存
Qualifier 列
- 列必须基于列族
-
- 使用的时候必须 列族:列
-
- 列可以根据需求动态添加或者删除
Cell 存储单元
- 我们最终定位到的资源
-
- 它由(RowKey + TimeStamp + Column Famliy + Qualifier)联合精准查找到一个数据
-
- 因为HDFS上的数据都是字节数组,所以HBase没有数据类型(字节码)