Hbase每个cell插入时都会写入时间戳(当前系统时间)来做版本标识,在读取时如果没有指定时间戳,默认取最新时间。Hbase默认保留3个版本数据。
HBase写入原理
1 客户端写入请求-->MemStore同时会写入Hlog,类似于Commit log,做数据恢复用
2 MemStore满足条件后刷入StoreFile
3 StoreFile满足条件后多个storeFile合并成一个大StoreFile
4 storeFile到一定大小后触发split,把当前region split成2个region,当前region下线,新region被HMater分配到HRegionServer上
图 1 一张表有2个列族,红色和黄色,每个列族有2个列,如果有多个版本同一位置会有多个块。
图2 同一个列族的数据会存储在一块
图3 r1:key值,cf1:列族的名字,c1:列名。t1:版本号,value值
图4 从左到右数据筛选效率越来越底下,最好把重要筛选信息存储在rowkey,可以提交查询性能
HBase读数据原理
1 客户端请求到zookeeper,zookeeper根据先查询那台主机管理meta信息,把请求转发到该主机
2 hbase 查询-ROOT-和.META