Hbase作为Hadoop生态当中的NOSQL数据库,基于HDFS去完成实际的数据存储任务,高性能是得到普遍的认可的。而Hbase在存储上的高性能,与自身的数据模型设计有很大的关系。今天的大数据入门分享,我们就来讲讲,Hbase数据模型的相关知识。
根据定义,我们知道Hbase是一个支持分布式的列式数据库,尤其是针对于大型数据的实时、随机的读写访问,Hbase能够提供很好的功能支持。
一、HBase的数据模型
Hbase的数据模型,我们需要从两个维度来理解,一是逻辑模型,二是物理模型。
逻辑模型
HBase来源于GoogleBigTable的开源,大部分特性和BigTable相同,可以理解为是一个稀疏的,长期存储的,多维度和排序的映射表,表中的每一行可以有不同的列。
HBase中最基本的单位是列,一列或者多列构成了行,行有行键(RowKey),每一行的RowKey都是唯一的,相同行键的put操作被认为是对该行的更新操作。
HBase的表有若干行,每行有很多列,列中的值有多个版本,每个版本的值称之为一个单元格,每个单元格存储的不同时刻该列的值。
物理模型
在逻辑上来说,HBase表是稀疏的行的集合,但是在物理上,HBase表是按列分开存储的。
按照列来划分列族(创建表的时候指定),存储每一行的不同列的物理文件,一个列族的数据存放在多个HFile中,一个列族的数据会被同一个region管理,物理上存放在一起。
二、HBase数据模型的核心概念
Namespace(表命名空间):表命名空间不是强制的,默认是default。当想把多个表分到一个组去统一管理的时候才会用到表命名空间。
Table(表):一个表由一个或者多个列族组成。它有一些数据属性,比如超时时间(TTL),压缩算法(COMPRESSION)等,都在列族的定义中定义。定义完列族后表是空的,只有添加了行,表才有数据。
Row(行):一个行包含了多个列,这些列通过列族来分类。行中的数据所属列族只能从该表所定义的列族中选取,不能定义这个表中不存在的列族,否则你会得到一个NoSuchColumnFamilyException。
Column Family(列族):列族是多个列的集合。HBase会尽量把同一个列族的列放到同一个服务器上,这样可以提高存取性能,并且可以批量管理有关联的一堆列。所有的数据属性都是定义在列族上。在HBase中,建表定义的不是列,而是列族。
Column Qualifier(列):多个列组成一个行。列族和列经常用Column Family:Column Qualifier来一起表示。列是可以随意定义的,一个行中的列不限名字、不限数量,只限定列族。
Cell(单元格):一个列中可以存储多个版本的数据,而每个版本就称为一个单元格(Cell),HBase中的数据细粒度比传统数据结构更细一级,同一个位置的数据还细分成多个版本。
Timestamp(时间戳/版本号):既可以把它称为是时间戳,也可以称为是版本号,因为它是用来标定同一个列中多个单元格的版本号的。
关于大数据入门,HBase数据模型详解,以上就为大家做了详细的介绍了。Hbase的数据模型,是支持Hbase实现高性能数据存储的重要概念,要搞懂Hbase,需要对这些概念理解清楚透彻才行。
网友评论