Hbase笔记一(数据模型)

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笔记一(数据模型)》

图一

Hbase的数据操作API有三个:Get、Put和Scan。Get和Put针对具体的row,所以需要提供row key。scan针对一系列row,可以通过提供一个start row key和一个end row key来获得一系列的row,如果不提供起始和结束,则针对整个表操作。

多维Map

有时候,将hbase的数据模型理解成一个多维Map更容易理解,如果将图一中的第一行row理解成多维Map,则如图二所示:

《Hbase笔记一(数据模型)》

图二

值得注意的是,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笔记一(数据模型)》

图三

下篇文章将继续讲解Hbase的设计架构

未经允许,请勿转载!

——完——

    原文作者:petemper
    原文地址: https://www.jianshu.com/p/cf20cb7678c6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞