HBase的数据模式是怎么样的



 HBase的数据模式是怎么样的?即有哪些元素?如何存储?等

1. 数据模式

如下列三个表:

第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。

而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。

Row Key

Time Stamp

ColumnFamily contents

ColumnFamily anchor

"com.cnn.www"

t9

 

anchor:cnnsi.com = "CNN"

"com.cnn.www"

t8

 

anchor:my.look.ca = "CNN.com"

"com.cnn.www"

t6

contents:html = "<html>..."

 

"com.cnn.www"

t5

contents:html = "<html>..."

 

"com.cnn.www"

t3

contents:html = "<html>..."

 

 

Row Key

Time Stamp

Column Family anchor

"com.cnn.www"

t9

anchor:cnnsi.com = "CNN"

"com.cnn.www"

t8

anchor:my.look.ca = "CNN.com"

 

Row Key

Time Stamp

ColumnFamily "contents:"

"com.cnn.www"

t6

contents:html = "<html>..."

"com.cnn.www"

t5

contents:html = "<html>..."

"com.cnn.www"

t3

contents:html = "<html>..."

 

 

2. HBase的基本元素:

表、行、列、单元格: 表的基本要素

键:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。

列族:所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加。

列族成员会一起放进存储器。而HBase面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase表与RDBMS中表类似,行是排序的,客户端可以把列添加到列族中去。

单元格cell: 单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。

区域region:将表水平划分,是HBase集群分布数据的最小单位。在线的所有区域就构成了表的内容。

加锁:对数据行进行更新,都需加锁。保持原子性。

3) 数据模型有哪些操作?

GetScanPutDelete,即返回特定行的属性,多行属性、插入、删除数据。

这些都需要一个HTable实例来操作。分别有GetScanPutDelete类来指定相应的参数、属性。

scan为示例:

 

[java] view plaincopy

  1. HTable htable = ...      // instantiate HTable  

  2.       

  3. Scan scan = new Scan();  

  4. scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));  

  5. scan.setStartRow( Bytes.toBytes("row"));                   // start key is inclusive  

  6. scan.setStopRow( Bytes.toBytes("row" +  (char)0));  // stop key is exclusive  

  7. ResultScanner rs = htable.getScanner(scan);  

  8. try {  

  9.   for (Result r = rs.next(); r != null; r = rs.next()) {  

  10.   // process result...  

  11. finally {  

  12.   rs.close();  // always close the ResultScanner!  

  13. }  



    4) 返回结果的排序方式是什么?

先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。

 

5)最后,HBase不支持联合查询

6mapreduceHBase表配合使用,默认mapreduce的任务分割是根据HBase表中region的多少来分割,一个region就有一个map

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/81063412
今日推荐