数据模型解析
数据类型:int,char… HBase不存在数据类型,字节存储
数据模型:行,列 HBase不仅有行列,HBase还有:RK,CF,TS,Q,cell
专业术语
NameSpace:
-
命名空间是类似于关系数据库系统中的数据库的概念,他其实是表的逻辑分组。这种抽象为多租户相关功能奠定了基础。
命名空间是可以管理维护的,可以创建,删除或更改命名空间。 -
HBase有两个特殊预定义的命名空间:
- default-没有明确指定名称空间的表将自动落入此名称空间
- hbase-系统命名空间,用于包含HBase内部表
Table:
-
Hbase的table由多个行组成
-
Row Key Time Stamp Column Family1 Column Family2 Column Family3 111 t6 CF2:q1=val1 CF3:q3=val3 112 t3 CF1:q2=val3 t2 CF1:q8=val2
RowKey:
- RowKey是用来检索记录的主键,是一行数据的唯一标识
- RowKey行键(RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes),RowKey以字节数组保存。
- 存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。
Column Family:
- 列簇在物理上包含了许多的列与列的值,每个列簇都有一些存储的属性可配置。
- 例如是否使用缓存,压缩类型,存储版本数等。在表中,每一行都有相同的列簇,尽管有些列簇什么东西也没有存。
- 将功能属性相近的列放在同一个列族,而且同一个列族中的列会存放在同一个Store中。列族一般需要在创建表的时候就进行声明,而且一般一个表中的列族数不要超过3个
- 这个和后期的优化相关
- 列隶属于列族,列族隶属于表
Column Qualifier:
- 列簇的限定词,理解为列的唯一标识。但是列标识是可以改变的,因此每一行可能有不同的列标识
- 使用的时候必须列族:列
- 列可以根据需求动态添加或者删除,同一个表中不同行的数据列都可以不同
Cell:
- cell是由row,column family,column qualifier,version 组成的
- cell中的数据是没有类型的,全部是字节码形式存贮。
- 因为HDFS上的数据都是字节数组
Timestamp:
- HBase中通过rowkey和column family,column qualifier确定的一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。
- 版本通过时间戳来索引。
- 时间戳的类型是64位整型
- 默认时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。
- 如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
- 每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
- 查询数据的时候,如果不指定版本数,默认显示版本号最新(高)的数据
- 为了避免数据存在过多版本中造成管理(包括存贮和索引)负担,HBASE提供了两种数据版本回收方式。
- —是保存数据的最后n个版本
- 二是保存最近一段时间内的版本(比如最近七天)
小结
HBase是一个稀疏的、分布式、持久、多维、排序的映射,它以行键(row key),列键(column key–>cfq)和时间戳(timestamp)为索引。
Hbase在存储数据的时候,有两个SortedMap,首先按照rowkey进行字典排序,然后再对Column进行字典排序。
照rowkey进行字典排序,然后再对Column进行字典排序。