作者:安全小护士 | 来源:互联网 | 2023-09-01 10:59
ABigtableisasparse,distributed,persistentmultidimensionalsortedmap.Hbase(HadoopDatabase)是基
A Bigtable is a sparse, distributed, persistent multidimensional sorted map.
Hbase(Hadoop Database)是基于hadoop HDFS的数据库。Hbase是一个稀疏的、分布式的、序列化的、多维排序的Map,由Row Key、column key、timestamp索引。对Hbase的数据模型可以有三种理解:表格、多维Map和keyvalue存储结构。
表格
对Hbase最简单和自然的数据模型理解,就是想像成一个有row和column的表格。这和我们熟悉的关系型数据库表的理解差不多,但还是有些不同的。(与关系型数据库还是有很大不同的,后面会讲到)。接下来定义几个名词:
Table:表。Hbase把数据装入表中
Row:Row由row key唯一确定。row key没有数据类型,往往看作一个byte[]
ColumnFamily:Row中的数据是由column family分组的。column family会影响到数据在hbase中的物理结构,所以必须提前定义好,否则以后很难修改。表中所有的row有相同的column family,尽管一个row不需要其所有的column family存有数据。column family 由字符串组成。
Column(Column Qualifier):column family中的数据是存在column中的,和column family一样,column也需要提前定义好。不同row之间的column不需要具有一贯性。和row key一样,column没有数据类型,往往看作一个byte[].
Cell:一个row key、一个column family和一个column唯一确定一个Cell。
Timestamp:cell中的值是有多个版本的。版本号默认就是数据被写入时的时间戳。如果写入数据时没有指定时间戳,则使用当前时间;如果读取数据时没有指定时间戳,则使用最新的版本。cell默认有三个版本。
综上,表结构如图所示:
图一
Hbase的数据操作API有三个:Get、Put和Scan。Get和Put针对具体的row,所以需要提供row key。scan针对一系列row,可以通过提供一个start row key和一个end row key来获得一系列的row,如果不提供起始和结束,则针对整个表操作。
多维Map
有时候,将hbase的数据模型理解成一个多维Map更容易理解,如果将图一中的第一行row理解成多维Map,则如图二所示:
图二
值得注意的是,row key和关系型数据库中的primary key的作用类似。Hbase表设置好之后,你将不能选择其他row作为row key。
key value存储
Hbase数据模型还可以看作是以key-value的形式存储。如图三所示,key可以认为是row key,还可以认为是row key, column family, column, timestamp的组合,这就取决于你对哪些cell感兴趣了。如图三,图一的第一行row可以表示成以下几种key value组合。
图三
下篇文章将继续讲解Hbase的设计架构
未经允许,请勿转载!
——完——