访问Hbase主要有三种方式
- 通过单个row key访问
- 通过row key的range
- 全表扫描
存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分利用排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
- 字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。
- 要保持整形的自然序,行键必须用0作左填充。
列族
访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:
- 我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。
时间戳和cell
- 通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引
- 时间戳也可以由客户显式赋值。
物理存储
- 当table中的行不断增多,就会有越来越多的Hregion(对应一个region)。
- Hregion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。
存储模型
- 一个table中的region会被随机分配给一个region server。
- region是分布式存储和负载均衡的最小单元。
HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。
- HRegion由一个或者多个Store组成,每个store保存一个columns family。
- 每个Strore又由一个memStore和0至多个StoreFile组成。如图:
- StoreFile以HFile格式保存在HDFS上。
- 基于block的存储结构
- block的索引驻留内存
HFile分为六个部分:
- Data Block 段–--保存表中的数据,这部分可以被压缩
- Meta Block 段 (可选的)--–保存用户自定义的kv对,可以被压缩。
- File Info 段--–Hfile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。
- Data Block Index 段–--Data Block的索引。每条索引的