热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hbase笔记一(数据模型)

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

图一

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的设计架构

未经允许,请勿转载!

——完——


推荐阅读
author-avatar
安全小护士
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有