欢迎投稿

今日深度:

HBase数据模型,

HBase数据模型,


HBase简介
– HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、
实时读写的分布式数据库
– 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理
HBase中的海量数据,利用Zookeeper作为其分布式协同服务
– 主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)
数据模型:
在使用关系型数据库设计表时,比如设计一个User表,包含字段:name,sex,fav,但是由于fav(爱好)可能会有多个,这时候就需要再添加一张fav的扩展表,但是在HBase中,就不需要。
因为HBase是面向列族的,可以动态添加。


上图是User表中的一行数据。
一、“1、2”是row key,决定一行数据,类似关系型数据库的行ID,按照字典顺序排序,row key 最多只能存储64K的字节数据。
二、”cf1、cf2”是两个列族,HBase表中的每个列都归属于某个列族,列族必须作为表模式定义的一部分预先给出。如 这张表建立时:create ‘User’, ‘cf1’,’cf2’;
列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如cf1列族中的列:cf1:name,cf1:sex, 新的列族成员(列)可以随后按需、动态加入;
权限控制、存储以及调优都是在列族层面进行的;
HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
三、”timestap”是时间戳,每个cell都有自己对应的时间戳。
在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。时间戳的类型是 64位整型。时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
如上图中cf1:name = yao的时间会比cf1:name = yaohuaji新,cf2:fav1=play的时间比cf2:fav1 = sleep的时间新。
四、单元格Cell
由行和列的坐标交叉决定;单元格是有版本的;
单元格的内容是未解析的字节数组;
由{row key, column( = +), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
物理存储模型:
对于上图,我们会发现存在一些空白单元格,这些格中是没有数据的,这样的话岂不是造成大量的空间浪费?而事实上,在物理存储时,并不会将这些空白格存储,而是按照列族来存储的,对于上表第一行数据,在物理中存储结构如下:
列族cf1:

列族cf2:

www.htsjk.Com true http://www.htsjk.com/hbase/39236.html NewsArticle HBase数据模型, HBase简介 – HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库 – 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理...
相关文章
    暂无相关文章
评论暂时关闭