HBase中的一张表java
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 Twainapi
schema设计通常须要考虑如下几个问题:bash
- table该有几个column family?
- 数据应该去哪一个column family?
- 每一个column family该有几个column?
- 每一个column该叫什么名字?
- 什么样的信息该放入cells?
- 每一个cells里面改存储几个版本?
- rowkey的结构是什么,它自己该包含什么信息?
wide table: 包含多个列的table;
tall table: 包含多行的table;less
tall table 相对来讲性能会好一点ide
在内存中,数据存在的时候就已是排好序的,当存储到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
复制代码
若是要知道一段时间以内某个名字的行,(时间戳+名字)的方式须要遍历整个表,而(名字+时间戳)则不须要spa
使用MD5加密rowkey的好处:长度是一致的,再也不须要单独的分隔符。可是时没法获取原来的rowkey元素
把信息放在rowkey的好处:能够以常量的时间获取数据设计
java api链接HBase,通常使用HTablePool,而后根据pool再拿到具体的表。单个的建立表的方式花销太大
本文来自<HBase In Action>一书。推荐。能够基本了解HBase的概念