HBase应用(2.3)数据模型

传统关系数据库通常使用结构化数据,数据记录都是结构化和有规律的,并以此对优化文件存储格式和内存结构。HBase支持半结构化数据(数据记录可能存在不一致的列,且大小不确定),半结构化的逻辑模型里数据构成是松耦合的,有利于文件的物理分散存放,但是也导致HBase无法支持关系约束和多行事务。

逻辑模型:有序映射的映射集合

HBase的逻辑模型可以概括为:

1
Map<RoeKey, Map<ColumnFamily, Map<ColumnQualifier, Map<Version, Data>>>>

模型中的Version安装降序排列,可以最快的访问最新版本,其他的键按照升序排列(例如tom排在jack后面,gender排在age后面):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"jack": {
"info": {
"age": {
1329088321287: 22
},
"gender": {
1329088321287: "male"
}
}
},
"tom": {
"info": {
"age": {
1329088321277: 21
},
"gender": {
1329088321277: "male",
1329088321276: "female"
}
}
}
}

物理模型: 面向列族

HBase将每条记录按照键值对存储在HFile中,HFile是2进制文件。users表里的info列族HFile存储的内容如下所示:

1
2
3
"jack", "info", "age", 1329088321287, 22
"jack", "info", "age", 1329088321221, 18
"jack", "info", "gender", 1329088321221, "male"

假设在users表中新增一个列族activity用于记录用户操作,当我们向users表中插入一条数据时,HBase会有一套工具对这一行数据进行管理,该机制称为region:

region

当向info列族插入数据时,activity列族的性能并不受影响。