- Hbase的数据模型
- 1. NameSpace
- 2. Table
- 3. RowKey
- 4. Column Family
- 5. Column Qualifier
- 6. Timestamp
- 7. Cell
-
定义:命名空间,他是指对一组表的逻辑分组,类似RDBMS中的数据库
-
作用:利用命名空间,在多租户场景下可做到更好的资源和数据隔离。
-
命名空间可以管理维护,我们可以创建,删除或更改命名空间
-
两个特殊的命名空间:
- hbase:系统内建表,包含namespace和meta表
- default:用户建表时未指定namespace的表都创建在此
- 组成:由多个行组成
- 作用:Hbase是用表来存储数据的
-
定义:行键,每一行的主键列
-
作用:是用来检索记录的主键,是一行数据的唯一标识
-
以什么形式保存?
- 在Hbase内部,rowKey保存为字节数组byte[]
-
存储时怎么排序?
- 数据按照RowKey的字典序(byte order)排序存储设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。来提高查询效率
-
行的一次读写是原子操作 (不论一次读写多少列)
-
定义:列族是每个子列的父级,每个子列都属于一个列族,一个列族包含一个或者多个相关列
-
创建表的时候需要指定列族,而列不需要必须指定。通过“列族名:列名”来表示某个具体的子列。
-
为了后期优化,一般一个表中的列族数不要超过3个
-
列隶属于列族,列族隶属于表
-
Hbase中的Schema就是 TableName + Column Family Name
-
将功能属性相近的列放在同一个列族,而且同一个列族中的列会存放在同一个Store中
-
定义:列簇的限定词,理解为列的唯一标识。但是列标识是可以改变的,因此每一行可能有不同的列标识使用要求:使用的时候必须 列族:列
-
列可以根据需求动态添加或者删除,同一个表中不同行的数据列都可以不同
-
定义:时间戳,版本号
-
类型:时间戳的类型是 64位整型
-
作用:通过rowkey和column family,column qualifier确定的一个存贮单元通过时间戳来索引。也就是说它可以做索引
-
每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引
-
默认的配置:查询数据的时候,如果不指定版本数,默认显示版本号最新(高)的数据
-
每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面
-
时间戳的赋值方式
- 时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。
- 时间戳也可以由客户显式赋值。
- 所以如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳
-
为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。
- 一是保存数据的最后n个版本,
- 二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。
-
定义:存储单元
-
组成:Cell是由row,column family,column qualifier,version 组成的
-
类型:cell中的数据是没有类型的,全部是字节码形式存贮。
- 因为HDFS上的数据都是字节数组
-
默认
- 外观看到的每个单元格其实都对应着多个存储单元,默认情况下一个单元格对应着一个存储单元
- 一个存储单元可以存储一份数据,如果一个单元格有多个存储单元就表示一个单元格可以存储多个值
-
怎么设置存储单元的个数:可以通过version来设置存储单元个数
-
怎么确定唯一的单元:可以通过rowKey + columnFamily + column + timestamp来唯一确定一个存储单元
-
注意:hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序。



