基本概念
基本元素
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