Hbase基本概念:
HBase使用LSM(Log-Structured Merge Tree日志结构合并树)树,用于为那些长期具有很高记录更新(插入或删除)频率的文件提供低成本的索引机制。LSM-Tree通过使用某种算法对索引变更进行延迟及批量处理,并通过一种类似于归并排序的方式联合使用一个基于内存的组件和一个或多个磁盘组件。
与传统访问方式(比如B+树)相比,该算法大大减少了磁盘磁臂的移动次数,同时还会提高那些使用传统访问方式进行插入时,磁盘磁臂开销(寻道+转动)远大于存储空间花费的情况的性价比。但是,对于那些需要立即响应的查找操作来说,某些情况下,它也会损失一些IO效率,因此LSM-Tree最适用于那些索引插入比查找操作更常见的情况。比如,对于历史记录表和日志文件来说,就属于这种情况。
B+树与LSM-Tree树本质区别
他们本质不同点在于他们使用现代硬盘的方式,尤其是磁盘。从磁盘使用方面讲,有两种不同的数据库范式:一种是寻道,另一种是传输。RDBMS是寻道型,它需要随机读写数据。
LSM-Tree则属于传输型,它的原理是把一颗大树拆分成N棵小树, 它首先写入到内存中(内存没有寻道速度的问题,随机写的性能得到大幅提升),在内存中构建一颗有序小树,随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历所有的小树,但在每颗小树内部数据是有序的。
LSM-Tree工作在磁盘传输速率的级别上,因为它会使用日志文件和一个内存存储结构把随机写操作转换为顺序写。读操作与写操作是独立的,这样这两种操作之间就不会产生竞争。
以上就是LSM树最本质的原理,有了原理,再看具体的技术就很简单了。
1)首先说说为什么要有WAL(Write Ahead Log),很简单,因为数据是先写到内存中,如果断电,内存中的数据会丢失,因此为了保护内存中的数据,需要在磁盘上先记录logfile,当内存中的数据flush到磁盘上时,就可以抛弃相应的Logfile(对于存储系统,最简单的就是把记录直接写到记录文件的末尾,这样的做法写效率是最高的,WAL日志是以append形式插入,所以速度非常快)。
2)什么是memstore, storefile?很简单,上面说过,LSM树就是一堆小树,在内存中的小树即memstore,每次flush,内存中的memstore变成磁盘上一个新的storefile,这样一次I/O可以进行多条数据的写入,从而充分利用每一次写I/O。。
3)为什么会有compact?很简单,随着小树越来越多,读的性能会越来越差,因此需要在适当的时候,对磁盘中的小树进行merge,多棵小树变成一颗大树。
Hbase基本角色:
客户端Client:
1.是整个Hbase的集群访问入口;
2.使用Hbase RPC机制与HMaster和HRegionServer通信;
3.与HMaster通信进行管理表操作;
4.与RegionServer进行数据读写操作;
5.寻址访问Zookeeper,数据读写访问RegionServer
Zookeeper:
1.保证任何时候,仅有一个HMaster;
2.实时监控HRegion Server的上线和下线信息,并实时通知HMaster,让HMaster知道哪些HRegionServere是活的及HRegionServer所在位置,然后管理HRegionServer;
3.存储Hbase的table元数据;
HMaster: