大家好,我是大D。
今天继续给大家分享一篇关于 HBase 数据模型的文章,希望大家能快速对 HBase 的数据结构有一个全面的认识。
前面我们有讲过 HBase 是一个面向列式存储的分布式数据库,它的数据模型与 BigTable 十分相似。在 HBase 表中,一条数据拥有一个全局唯一的键(RowKey)和任意数量的列(Column),一列或多列组成一个列族(Column Family),同一个列族中列的数据在物理上都存储在同一个 HFile 中,这样基于列存储的数据结构有利于数据缓存和查询。
同时,HBase 会将表按主键划分为多个 Region 存储在不同 Region Server 上,以完成数据的分布式存储和读取。(可参照下图理解,图片源于网络)
1.Column Family
Column Family 即列族,HBase 基于列族划分数据的物理存储,一个列族可以包含多列。
一般同一类的列会放在一个列族中,每个列族都有一组存储属性:
是否应该缓存在内存中; 数据如何被压缩或行键如何编码等。 HBase 在创建表的时候就必须指定列族。HBase 的列族不是越多越好,官方推荐一个表的列族数量最好小于或者等于3,过多的列族不利于 HBase 数据的管理和索引。
2.RowKey
RowKey 的概念与关系型数据库中的主键相似,HBase 使用 RowKey 来唯一标识某行的数据。
访问 HBase 数据的方式有三种:
基于 RowKey的单行查询; 基于RowKey的范围查询; 全表扫描查询。
3.Region
HBase 按照行的方向将表中的数据基于 RowKey 的不同范围划分到不同 Region 上,每个Region都负责一定范围的数据存储和访问。
每个表一开始只有一个 Region,随着数据不断插入表,Region 不断增大,当增大到一个阀值的时候,Region 就会等分成两个新的 Region。当table中的行不断增多,就会有越来越多的 Region。
另外,Region 是 Hbase 中分布式存储和负载均衡的最小单元,不同的 Region 可以分布在不同的 Region Server上。但一个 Region 是不会拆分到多个 Server 上的。(拓展:谈一下你对 HBase 的认识?)
这样即使有一个包括上百亿条数据的表,由于数据被划分到不同的 Region上,每个 Region 都可以独立地进行写入和查询,HBase 写入或者查询的时候可以基于多 Region 分布式并发操作,因此访问速度也不会有太大的降低。
4.TimeStamp
TimeStamp 是实现 HBase 多版本的关键。在HBase 中,使用不同 TimeStamp 来标识相同RowKey对应的不同版本的数据。相同 RowKey的数据按照 TimeStamp 倒序排列。默认查询的是最新的版本,当然用户也可以指定 TimeStamp 的值来读取指定版本的数据。
另外,非常欢迎大家加我VX:Abox_0226,备注「进群」,有关大数据技术的问题在群里一起探讨。
|