您的位置:首页 > 其它

HBase note. Data model

2015-04-01 21:01 197 查看
名词概念.

Table: 一个Table由众多rows组成, 需要在建表时就决定

Row: 一个row包含row key还有一个或多个columns. Rows以row key按字母从小到大排序, 跟hdfs存储模型一致.

Column:  一个column包含一个column family和一个qualifier, 用:隔开

Column Family: 一个columns的集合和其对应的value值. 与此同时, 每个column family都会有一堆跟存储相关的属性值. 例如值是否需要存储到cache中, 数据如何压缩, row keys如何编码等. 每个row都有相同的column family, 但是有可能该family是空的.

Column Qualifier: column qualifer可以理解为对column family的索引. 但是column family需要再创建table时确定. 而qualifier可以在有需要的时候动态添加. 所以每个的column qualifier可以有很大差别.

由于HBase并不提供记录column信息的meta table, 所以使用者必须自己管理和记住使用过的column的信息.

Cell: 一个完整的cell是由row, column family和column qualifier和value和timestamp组合而成, 代表了cell的其中一个版本.

Timestamp: timestamp陪同value在写入时被添加. 默认情况下, timestamp都是唯一的. 它的实际意义是, 这个data的写入时间. 不过也可以人为设定timestamp

Namespace: 可以理解为对table进行分组管理的这么一个用途. 这是为了后续版本添加新功能而准备的一个新概念. 具体在hbase shell中的使用方式如下:

#Create a namespace
create_namespace 'my_ns'

#create my_table in my_ns namespace
create 'my_ns:my_table', 'fam'

#drop namespace
drop_namespace 'my_ns'

#alter namespace
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}


在使用者不定义任何namespace的情况下, hbase有两种预先准备好的namespace:

1. hbase-system namespace, 是用来存放HBase的内部tables, 例如meta table

2. default-table namespace, 就是使用者没人指定namespace下的默认table.

作为例子, 设计一个table, 记录学生的基本信息, 还有班级信息, 例如学号和所在年级.

设计如下:

1. table名字

2. 每个学生的名字作为row key

3. 基本信息和班级信息分别column family, 各自为"Info"和"Class"

4. 而具体的基本信息和班级信息作为qualifier, 根据需要的时候添加. 而这里, 基本信息的qualifer, 设计成性别和年龄; 班级信息的qualifier, 设计成学号和年级

最后, 结构上如下图:



而实际的物理存储模型应该是:



rowkey先按照字母升序排序, 然后column family升序排序, 然后qualifier升序排序, 然后timestamp降序排序. value不参与排序
所以会有以上物理存储的模型,
一个cell有很多个version的话, 会出现rowkey, column family和qualifier相同, 但是timestamp不同的情况, 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: