《Hbase权威指南》深入学习hbase架构(7):缓存策略

    HBase中的缓存只要是指在HRegion server节点之上的cache缓存。一部分用来作为memstore,起作用主要是保存最近更新的部分数据以加快客户端响应;另一部分作为blockcache,主要用于读操作。
    HRegion server会为其维护的每一个region提供一个memstore,用户的所有修改操作,首先将数据append到WAL日志,然后写到内存中的memstore中,然后就会给客户端确认修改成功。在默认情况下memstore的大小是64MB,当写到memstore中的数据大于64MB后,就会将其中的数据刷新到磁盘上持久化数据。
    每一个HRegion server上都只有一个blockcache结构,主要是用于对storefile文件的读操作的优化:storefile文件是有hbase blocks著称的,block是hbase基础的I/O单元——每次读或写数据都是按block的大小操作的(默认64KB);blockcache是基于LRU算法的,服务器每次将读取的一个block数据块保存到blockcache结构,然后在blockcache的数据量达到上线阀值( heapsize * hfile.block.cache.size * 0.85)后启动基于LRU算法的淘汰机制,将最老最不常用的block删除。
    在HRegion server响应可以查询请求的时,首先会在memstore中查询匹配的数据,没有查到的话,再到磁盘上查询storefile中的数据,系统每次读取一个block,并将其放入blockcache如果在当前的block中读到匹配的数据则直接将结果返回给客户端;否则会接着读下一个block,直到将所属region中的数据读完,最后返回结果——查到匹配的数据或返回空。
    另外需要注意的是,N * memstore + blockcache的大小总和不能大于给HRegion server配置的JVM heap堆内存的80%,否则服务器将启动不起来。

你可能感兴趣的:(NoSQL,hbase,分布式数据库)