基本概念
基本元素
-
Row key(行键):对应为关系型数据库中的主键,唯一,可以是任意的字符串,最大长度为64K,在内部存储中会被存储为字节数组。如示例1中"com.cnn.www"为Row Key。HBase表中的数据是按照Row Key字符串的字典序排列的;利用此特性,将一下经常读取的行存储到一起或者靠近,减少Scan耗时,提高读取的效率。
-
Column Family(列族):表Schema的一部分,HBase表中的每个列都归属于某个列族,即列族是由一系列的列组成的,必须在创建表的时候就指定好。如示例1中,contents和anchor为两个列族,分别包含了不同的列。列族不是越多越好,过多的列族会导致io增多及分裂时数据不均匀,官方推荐列族数量为1~3个。列族不仅能帮助开发者构建数据的语义边界,还能有助于开发者设置某些特性,例如可以指定某个列族内的数据压缩形式。访问控制、磁盘和内存怒的使用统计都是在列族层面进行的。
-
Column(列):只能从属于一个列族。列的数量一般没有强限制,一个列族中可以有数百万列,且这些列都可以动态添加。如示例1中,anchor:cssnsi.com, anchor:my.look.ca和contents:html,分别为anchor和contents列族的列。
-
Version Number(版本号):HBase中每一列的值或者说每个单元格的值都是具有版本号的,默认使用系统当前时间戳,如示例1中Time stamp,也可以用户显式地设置。一个单元格的不同版本号按照降序排列,访问的时候优先读取最新的值,这种优化的目的在于让新值比旧值更容易被读取。用户可以指定每个值所能保存的最大版本数。
-
Cell(单元格):一个单元格就是由RowKey、Column Family:Column、Version Number唯一确定的,Cell中的数据是没有类型的,全部都是字节码。
表 Table
- 概念模型
示例1:表webtable
有一个名为webtable的表,包含两个列族:contents和anchor.在这个例子里面,anchor有两个列 (anchor:cssnsi.com, anchor:my.look.ca),contents仅有一列(contents:html)
Row key |
Time stamp |
ColumnFamily contents |
ColumnFamily anchor |
“com.cnn.www” |
t9 |
|
anchor:cnnsi.com = “CNN” |
“com.cnn.www” |
t8 |
|
anchor:my.look.ca = “CNN.com” |
“com.cnn.www” |
t6 |
contents:html = “<html>…” |
|
“com.cnn.www” |
t5 |
contents:html = “<html>…” |
|
“com.cnn.www” |
t3 |
contents:html = “<html>…” |
|
- 物理模型
在概念模型中,整个表综观上表现为一个稀疏的矩阵,但是在实际的物理存储中,整个表是区分列簇存储的。
Row Key |
Time stamp |
Column Family anchor |
“com.cnn.www” |
t9 |
anchor:cnnsi.com = “CNN” |
“com.cnn.www” |
t8 |
anchor:my.look.ca = “CNN.com” |
Row Key |
Time stamp |
Column Family contents |
“com.cnn.www” |
t6 |
contents:html = “<html>…” |
“com.cnn.www” |
t5 |
contents:html = “<html>…” |
“com.cnn.www” |
t3 |
contents:html = “<html>…” |
在物理模型中,又有Region Server、Region、Store等概念。
-
Store:每个列族保存在一个store中,每个store又包含一个MemStore和多个StoreFile;当MemStore达到一定容量时,会持久化到StoreFile中。
-
Region:HBase中扩展和负载均衡的基本单位,一个Region包含多个store。当Region达到一定容量上限是,会分裂成多个Region。
-
Region Server:维护Region并处理对Region的IO请求、切分在运行过程中变得过大的Region。

参考链接:最近学习了HBase