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的概念