HBase的get过程(一)
?0.90.X的get和scan操作原理上是比较一致的,get操作都变为scan操作。不过在分析之前我们还是从get说起
话不多说首先看看get这个接口,hbase客户端对于get有以下几种:
?
每个region中有一个regionscanner,每个regionscanner中维持一个heap的优先级队列,其中包含所有的storescanner,每个storescanner中包含一个Memstorescanner和n个Hfilescanner
进行查找时首先会定位到hfilestore或是memstore,找到这个get的row起始位置
?
在HFile或是memstore中数据视安从小到大进行排序的,排序规则是按keyvalue的大小,row,family,column,timestamp,最后是type。
?
?上图就是模拟hfile里面keyvalue的一个排序规则。
哪些get的话如果没有指定时间戳的话会返回最近的一个值。,get也可以制定取回的版本数。
如果我们需要取回3个版本如上图所示
首先每个Hfile会定位到该row的起始处位置如此处在这3个Hflie的开头,若指定的column是C1
然后比较这三个文件开头的keyvalue大小,显然第三个R1,cf,c1,9最小,故首先取它
然后该文件指针往下移,重新比较当前指针的最小值,此时第一个文件的R1,cf,c1,8最小故第二个版本取它
然后指针下移继续比较知道满足版本数为止
