HBase内部探险-数据模型

#</> 数据模型


HBase数据模型的核心概念

Namespace(表命名空间):表命名空间不是强制的,默认是default。当想把多个表分到一个组去统一管理的时候才会用到表命名空间。类似传统关系型数据库中的数据库database或schema。

Table(表):一个表由一个或者多个列族组成。它有一些数据属性,比如超时时间(TTL),压缩算法(COMPRESSION)等,都在列族的定义中定义。定义完列族后表是空的,只有添加了行,表才有数据。

Row(行):一个行包含了多个列,这些列通过列族来分类。行中的数据所属列族只能从该表所定义的列族中选取,不能定义这个表中不存在的列族,否则你会得到一个NoSuchColumnFamilyException。由于HBase是一个列式数据库,所以一个行中的数据可以分布在不同的服务器上。

Column Family(列族):列族是多个列的集合。其实列式数据库只需要列就可以了,为什么还需要有列族呢?因为HBase会尽量把同一个列族的列放到同一个服务器上,这样可以提高存取性能,并且可以批量管理有关联的一堆列。所有的数据属性都是定义在列族上。在HBase中,建表定义的不是列,而是列族,列族可以说是HBase中最重要的概念。

Column Qualifier(列):多个列组成一个行。列族和列经常用Column Family: Column Qualifier来一起表示。列是可以随意定义的,一个行中的列不限名字、不限数量,只限定列族。

Cell(单元格):一个列中可以存储多个版本的数据。而每个版本就称为一个单元格(Cell),所以在HBase中的单元格跟传统关系型数据库的单元格概念不一样。HBase中的数据细粒度比传统数据结构更细一级,同一个位置的数据还细分成多个版本。

Timestamp(时间戳/版本号):既可以把它称为是时间戳,也可以称为是版本号,因为它是用来标定同一个列中多个单元格的版本号的。如果不指定版本号,系统会自动采用当前的时间戳来作为版本号;而手动定义一个数字来当作版本号的时候,这个Timestamp就真的是只有版本号的意义了。

如图所示。

rowkey的排序规则:每一个行都有一个类似主键的rowkey,而这个rowkey在HBase中是严格按照字典排序的,也就是说11比2小,row11会排在row1和row2中间。

HBase是否支持表关联:官方给出的答案是干脆的,那就是“不支持”。如果你想实现数据之间的关联,你就必须自己去实现了,毕竟这就是你挑选NoSQL数据库必须付出的代价。

HBase是否支持ACID:相信大家都是从传统关系型数据库转过来的,对ACID都不陌生。ACID就是Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)的首字母缩写。ACID是事务正确执行的保证。HBase部分支持了ACID。

表命名空间:表命名空间(Namespace)这个概念相对于Table、Column Family、Column等概念是比较新的概念。表命名空间的作用是把多个属于相同业务领域的表分成一个组。一个表可以自由选择是否有命名空间,如果创建表的时候加上了命名空间后,这个表名字就成为了:

<NameSpace>:<Table>

创建的语句变成(在hbase shell下执行):

hbase(tmain):006:0> create 'myns:mytable2','mycf2'0 row(3)in 4.4640 seconds=> Hbase::Table -mynsimytable2

表命名空间目前开放出来的方法只有set和unset两种,并且只能在shell下调用:​​​​​​​

alter_namespace 'nsl',(METHOD=>'set','PROPERTY_NAME'=>'ROPERTY_VALUE")alter namespace 'ns1',(METHOD ->'unset',NAME->'PROPERTY_NAME')

比如:

alter_namespace 'myns',{METHOD=>'set','MY_PROP'->'hello_world'}

通过该方法可以设置该表命名空间的属性。

表命名空间有什么用:表命名空间主要是用于对表分组,那么我们对表分组有啥用呢?命名空间可以填补HBase无法在一个实例上分库的缺憾。通过命名空间我们可以像关系型数据库一样将表分组,对于不同的组进行不同的环境设定,比如配额管理、安全管理等。

保留表空间:HBase中有两个保留表空间是预先定义好的:

hbase:系统表空间,用于HBase内部表。

default:那些没有定义表空间的表都被自动分配到这个表空间下。 

如下图:

 

往期推荐:

 

到底什么样的企业应该建设数据中台?

数据中台到底是不是大数据的下一站?

StreamSets实时采集MySQL数据到HBase

Phoenix Java API配置及使用总结

Phoenix表映射

Phoenix视图映射

Kafka消息送达语义说明

Kafka基础知识总结

Hadoop YARN:ApplicationMaster向ResourceManager注册AM源码调试

Apache Hadoop YARN:Client<-->ResourceManager源码解析

Apache Hadoop YARN:Client<-->ResourceManager源码DEBUG

Hadoop YARN:ApplicationMaster与ResourceManager交互源码解析

Hive企业级调优

HiveQL查询连续三天有销售记录的店铺

HiveQL实战蚂蚁森林低碳用户排名分析:解法一

HiveQL实战蚂蚁森林低碳用户排名分析:解法二

HiveQL实战蚂蚁森林植物申领统计分析

Hive-函数

Hive-查询

Hive-DML(Data Manipulation Language)数据操作语言

Hive-DDL(Data Definition Language)数据定义

Hive优化(整理版)

Spark Core之Shuffle解析

数据仓库开发规范

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值