#</> 数据模型
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解析
数据仓库开发规范