其他分享
首页 > 其他分享> > hbase中的数据结构

hbase中的数据结构

作者:互联网

跳表(skiplist)

hbase的数据是按rowkey有序排列的,需要对新添加的数据进行排序,新添加的数据在内存中会使用java.concurrent.ConcurrentSkiplistMap构建memstore,最终持久化为hfile存到磁盘。

为什么使用skiplist,一方面因为高效,插入操作的时间复杂度为logn,另一方面在写磁盘的时候,从头至尾遍历一遍链表顺序写入磁盘即可。

LSM树 (log structured merge tree)

这里运用的是归并排序的思想,只不过子问题的最底层的数据存在了磁盘上。

Hbase将随机的写入行为,通过在内存中生成的包含部分数据的memstore,最终顺序写入有序数据文件到磁盘,将随机写入转化为了顺序写入。

而数据的可靠性保证,是通过记录写入操作的hlog文件,在异常时进行恢复来保证的,写磁盘的过程也是顺序写,速度很快。

最终的查询过程,乐意类比归并排序的过程,在一个表对应的多个hfile,分别查询想要的结果,再将这些结果进行归并,获取最终想要的结果。

布隆过滤器(bloomfilter)

hbase对数据的读取,是基于block的,查询某个rowkey时,布隆过滤器会告诉我们这个rowkey可能在这个block,或者一定不在这个block。当一定不在时就可以跳过block的读取,节约了时间和IO,当可能存在时再读取到内存执行查找操作。

标签:写入,rowkey,磁盘,hbase,数据结构,数据,block
来源: https://blog.csdn.net/a1529816/article/details/121185551