hbase是基于hdfs的面向列的非关系型数据库
hbase中的存储都是以字节形式存储,它的rowkey会按照字节顺序排序,并添加索引
hbase会按照row的数量自动切割成regiog,保持负载均衡
存储形式
传统数据库中若某字段的数据为null是占用空间的二hbase是不会占用空间的
Hbase特点
*Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正是因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
*Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
*hbase通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
*由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在高并发的情况下平均下来,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
*hbase稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
HBase架构
HBase中的角色
HMaster
1.监控RegionServer
2.处理RegionServer故障转移
3.处理元数据的变更
4.处理region的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper发布元数据的位置给客户端
RegionServer
1.负责存储HBase的实际数据
2.处理分配给它的Region
3.刷新缓存到HDFS
4.维护Hlog(每个regionserver都有一个Hlog)
5.执行压缩
6.负责处理Region分片(自动分片)
Hbase设计原则
唯一性原则:必须在设计上保证它的唯一性,由于在hbase中数据存储是k/v形式若hbase中的同一表插入相同rowkey,则原先的数据会被覆盖掉
排序原则:hbase的rowkey是按照阿斯克码设计的,若与时间有关,使用时间log作为rowkey的前缀
散列原则:不能都集中在一个regionServer上,应该分布在各个节点上,前缀加上[a][b][c]
越短越好:长度不能超过64kb,太长了影响Hfile的存储效率,缓存mateStore不能存放太多东西
访问table的方式
1通过单个rowkey访问
2通过rowkey的region访问
3全表扫描
读数据流程
1client先zookeeper发送请求获取mate表所在的regionServer
2返回mate表所在的regionServer
3读取mate表,查询rowkey所在region的regionServer
4返回region所在的re