hbase数据模型与客户端编程

本文主要介绍一下hbase中数据的存储模型,以及如何进行客户端编程

hbase中数据模型

      hbase中数据模型与关系型数据库不同,关系型数据库围绕表,列和数据类型,数据的形态使用严格的规则,遵守这些严格的规则称之为结构化数据。Hbase设计上没有严格的数据形态,数据记录可能包含不一致的列,不确定大小等,这种数据成为半结构化数据。
      在半结构化的逻辑模型中数据的构成是松耦合的,这一点有利于数据的分散存储,同时Hbase物理设计上适合于物流分散存放,这一点也影响了逻辑模型。此外这种物理模型设计业迫使hbase放弃了一些关系数据库具有的特性。特别是hbase不能实施关系约束并且不支持多行事务(hbase默认开启行所,尽管不支持多行事务但支持单行事务)。

1hbase中客户端编程模型

用户看到的数据模型是通过客户端api展示的逻辑视图,主要模型如下
   表(table):hbase用来组织数据的,表名是字符串(String),由可以在文件系统路径里使用的字符组成
   行(row):在表里数据按行存储,行由行键(rowkey)唯一标示。行健没有数据类型,总是视为字节数组byte[]。
   列族(column family):行里的数据按照列族分组,列祖也影响到hbase数据的物理存放,因此必须事先定义好并且不要轻易的修改。尽管行不需要在每个列族中存取数据,但每行必须包含所有的列族。列族的名字是字符串,由可以在文件系统路径里使用的字符组成
   列限定符(column qualifier):列族里的数据通过列限定符或列来定位。列限定符不必事前定义。列限定符不必再不同行之间保持一致,就像行键一样,列限定符没有数据类型,总是视为字节数组byte[]。
   单元(cell):行健、列族和列限定符一起确定一个单元,存储在单元中的数据称为单元值(value),值也没有数据类型,视为字节数组byte[]
   时间版本(version):单元值有时间版本。时间版本用时间戳标示,是一个long型。没有指定时间版本时,使用当前时间戳作为操作的基础。hbase保留单元值时间版本的数量基于列族进行配置。默认值是3个

上述六个概念构成hbase的基础。用户最终看到的是通过API展示的上述6个基本概念的逻辑视图,他们是对hbase物理存放在硬盘上数据进行管理的基石。

2 数据坐标

hbase中每个数据值使用坐标来访问,一个值得完整坐标包括行健、列族、列限定符和时间版本。在逻辑视图中时间版本的数字也是坐标之一,因此hbase表中存储数据使用的四维坐标系统。坐标图如下:


3 数据的物理模型

每个列族在硬盘上有自己的HFile集合,这种物理上隔离的允许在列族底层Hfile层面上分别进行管理。hbase的记录按照键值对存储在HFile中,因此在hbase中的一行在HFile中用多行存储,同时一行中一个列族的数据并不要求存储在同一个HFile中。唯一的要求是一行中列族的数据需要物理存储在一起。下图是用于两个列族的存储实例图:



4 客户端编程

操作hbase数据库可以使用多种客户端,主要有Hbase shell脚本,jRuby,REST,Thrift和java api。由于hbase是使用java语言编写的,所以这里只介绍java API编程
建立一个表,比如打开users表的连接代码如下:
HtableInterface userTable=new HTable("users");
住:由于在hbase中对客户端编程以讲的很简练,这里也不在做总结,吧书中内容拍了照片,方便以后复习。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值