欢迎投稿

今日深度:

初识Hbase,

初识Hbase,


HBase中的一张表

Put p =new Put(Bytes.toByte("TheRealMT"));
p.add(Bytes.toByte("info"))
p.add(Bytes.toByte("name"))
p.add(Bytes.toByte("Mark Twain"))
复制代码

在这里 rowdy是 TheRealMT,column family是 info,column qualifier是name,cell中真正存值是 Mark Twain

  1. table创建好之后,每次修改column family必须先下线当前的额表
  2. column qualifier能被当做数据,HBase本身相当于是一个多维的map
  3. hbase总没有多对多和一对多这种映射,更多的是非结构化数据
  4. hbase单行操作是原子的

schema设计一般需要考虑以下几个问题:

  • table该有几个column family?
  • 数据应该去哪个column family?
  • 每个column family该有几个column?
  • 每个column该叫什么名字?
  • 什么样的信息该放入cells?
  • 每个cells里面改存储几个版本?
  • rowkey的结构是什么,它本身该包含什么信息?

如何理解HBase中的key-value结构?

宽表和高表的概念

wide table: 包含多个列的table;
tall table: 包含多行的table;

tall table 相对来说性能会好一点

rowkey设计需要考虑的一些因素

在内存中,数据存在的时候就已经是排好序的,当存储到HFile的时候也是排好序的,HBase中获取数据的唯一方式就是rowkey

比如 名字+时间戳 的组合

    Olivia1
    Olivia2
    Olivia5
    Olivia7
    Olivia9
    TheFakeMT2
    TheFakeMT3
    TheFakeMT4
    TheFakeMT5
    TheFakeMT6
    TheRealMT1
    TheRealMT2
    TheRealMT5
    TheRealMT8
复制代码

时间戳+名字 的组合

1Olivia
1TheRealMT
2Olivia
2TheFakeMT
2TheRealMT
3TheFakeMT
4TheFakeMT
5Olivia
5TheFakeMT
5TheRealMT
6TheFakeMT
7Olivia
8TheRealMT
9Olivia
复制代码

如果要知道一段时间之内某个名字的行,(时间戳+名字)的方式需要遍历整个表,而(名字+时间戳)则不需要

使用MD5加密rowkey的好处:长度是一致的,不再需要单独的分隔符。但是时无法获取原来的rowkey元素
把信息放在rowkey的好处:可以以常量的时间获取数据

java访问的一般方式

java api连接HBase,一般使用HTablePool,然后根据pool再拿到具体的表。单个的创建表的方式花销太大

附录

本文来自<HBase In Action>一书。推荐。可以基本了解HBase的概念

www.htsjk.Com true http://www.htsjk.com/hbase/41930.html NewsArticle 初识Hbase, HBase中的一张表 Put p =new Put(Bytes.toByte( "TheRealMT" ));p.add(Bytes.toByte( "info" ))p.add(Bytes.toByte( "name" ))p.add(Bytes.toByte( "Mark Twain" )) 复制代码 在这里 rowdy是 TheRealMT,column family是 info,co...
相关文章
    暂无相关文章
评论暂时关闭