最近学习了HBase (2)

Column Family(列族)----表Schema的一部分,HBase表中的每个列都归属于某个列族,即列族是由一系列的列组成的,必须在创建表的时候就指定好。列明都以列族作为前缀,例如courses:history、courses:math都属于courses这个列族。列族不是越多越好,过多的列族会导致io增多及分裂时数据不均匀,官方推荐列族数量为1~3个。列族不仅能帮助开发者构建数据的语义边界,还能有助于开发者设置某些特性,例如可以指定某个列族内的数据压缩形式。访问控制、磁盘和内存怒的使用统计都是在列族层面进行的,

Column(列)----一般从属于某个列族,列的数量一般没有强限制,一个列族中可以有数百万列且这些列都可以动态添加

Version Number(版本号)----HBase中每一列的值或者说每个单元格的值都是具有版本号的,默认使用系统当前时间,精确到毫秒,也可以用户显式地设置。每个单元格中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。另外,为了避免数据存在过多版本造成的管理(存储 + 索引)负担,HBase提供了两种数据版本回收的方式,一是保存数据的最后n个版本,二是保存最近一段时间内的版本,用户可以针对每个列族进行设置

Cell(单元格)----一个单元格就是由RowKey、Column Family:Column、Version Number唯一确定的,Cell中的数据是没有类型的,全部都是字节码

另外一个概念就是,访问HBase Table中的行,只有三种方式:

通过单个Row Key访问

通过Row Key的range

全表扫描

这部分介绍的Table、RowKey、Column Family、Column等都属于逻辑概念,而上部分中的Region Server、Region、Store等都属于物理概念,下图展示了逻辑概念与物理概念之间的关系:

最近学习了HBase

即:table和region是一对多的关系,因为table的数据可能被打在多个region中;region和columnFamily是一对多的关系,一个store对应一个columnFamily,一个region可能对应多个store

 

HBase的逻辑表视图与物理表视图

接着看一下HBase中的表逻辑视图与物理视图。首先是逻辑表视图:

最近学习了HBase

看到这里定义了2个列族,一个Personal Info、一个Family Info,对应到数据库中,相当于把两张表合并到一个一起。

从逻辑视图看,上图由ZhangSan、LiSi两行组成,但是在实际物理存储上却不是按照这种方式进行的存储:

最近学习了HBase

最近学习了HBase

看到主要是有两点差别:

一行被拆开了,按照列进行存储

空列不会被存储,例如LiSi在Peronal Info中没有Provice与Phone,在Family Info中没有Brother

 

HBase的增删改查

光说不练假把式,不能光讲理论,代码也是要有的,为了方便起见,我用的是阿里云HBase,和HBase一样,只是省去了运维成本。当然虽然本人是内部员工,但是工作之外的学习是不会占用公司资源的^_^悄悄告诉大家,阿里云HBase有个福利,第一个月免费试用,想同样玩一下HBase的可以去阿里云搞一个。

首先添加一下pom依赖,用阿里云指定的HBase,使用上和原生的HBase API一模一样:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfdg.html