Hbase表结构

x33g5p2x  于2021-03-14 发布在 Hbase  
字(1.6k)|赞(0)|评价(0)|浏览(479)

作为大数据存储数据库,Hbase有别于其他所有的数据库,它是一个面向列的、非结构化的存储数据库。想要深刻理解Hbase为何采用面向列的、非结构化的方式存储数据,就有必要知道常见的数据存储结构和数据存储方式。

一、数据存储结构

何为面向列的存储呢?这涉及数据存储结构,常见的数据存储结构有结构化数据、半结构化数据和非结构化数据3种。

(1)结构化数据

  • 具有属性划分,结构固定以及类型等信息的数据就是结构化数据。关系型数据库中所存储的数据大多是结构化数据,如学生表,它拥有ID、Age、Class、Grade等属性信息
  • 结构化数据通常被直接存放在数据库表中,数据记录的每一个属性都对应数据表的一个字段

(2)半结构化数据

  • 如XML、HTML等具有一定结构的同时又具有一定灵活性的数据就是半结构化数据。半结构化数据其实也是非结构化数据的一种。对于半结构化数据的存储,可以将其直接转换成结构化数据进行存储,也可以根据数据记录的大小和特点同非结构化数据一样选择合适的存储方式

(3)非结构化数据

  • 如图像、文本文件、网页、视频、声音等无法用统一的结构来表示的数据即为非机构化数据。对于如KB级的较小数据,一般可将整条数据作为一个字段被直接存放到数据库表中,这样对于整条数据记录的快速索引也有好处。较大的数据一般被直接存放在文件系统中。而与数据相关的索引信息则可被存放在数据库中。Hbase就是一个非常典型的非结构化存储数据库。对于很难按某一个概念去抽取并且数据结构字段杂乱无章或不确定的数据,Hbase一般直接创建数据表。当业务发展需要存储更多的信息时,Hbase可以动态扩展,它不必像关系型数据库一样,需要系统升级、维护等较为复杂的操作

二、数据存储方式

那么何为面向列存储呢?这涉及数据存储方式,常见的数据存储方式有按行存储、按列存储、按Key-Value方式存储。

(1)按行存储

  • 数据按行存储在底层文件系统中,通常每一行数据会被分配固定的空间。按行存储的优点就是有利于增删改查询整行数据;缺点是如果想查询某列数据则会读取到一些不必要的数据。

(2)按列存储

  • 数据按列存储在底层文件系统中,按列存储的优点是有利于增删改查整列数据,动态扩展也更加方便;缺点是如果读取整行数据,可能需要多次I/O操作。

(3)Key-Value结构

  • Key-Value具有特定的结构,Key部分被用来快速地检索一条数据记录,Value部分被用来存储实际的用户数据信息。Key-Value作为承载用户数据的基本单元,会产生一定的结构化空间开销,因为其需要保存一些描述自身的信息,例如,类型,时间戳等。

三、Hbase表结构

如下图所示,Hbase是一个非结构化的数据表

:-:

以下逐一说明Hbase涉及的概念

  • (1)主键(RowKey):主键被用来检索记录,Hbase table可以通过单个rowkey、全表扫描、rowkey的rang 三种方式访问行。一个主键代表一条记录,但是这个记录是非结构化的数据,Hbase中的数据类型丰富多样却可以动态扩展。主键的存在还可以实现数据的快速查询。
  • (2)列族(Column Family):列中的数据都是以二进制的形式存在的,列中没有数据类型的数据,在创建表的时候申明的多个列就是列族。
  • (3)列的标识符:Hbase表中一个列族可以包含多个列,每个列的字段名称就是列的标识符。
  • (4)cell:Hbase通过主键(RowKey)、时间戳(TimeStamp)、列族和列的标识符定位一个cell,即定位后的一个具体数据值。
  • (5)时间戳(TimeStamp):时间戳需要结合cell来理解,在Hbase表中,每个cell的数据是可以进行版本管理的,时间戳被用来区分cell的各个版本,获取的cell值被默认为最新版本的值。我们在创建表的时候可以指定版本管理的数量,例如,创建表的时候指定info列族版本管理数量为5,那么存储在info列族的cell最多可以保留包括当前值在内的5个历史版本。

相关文章