HBase内存结构之跳表数据结构浅析

本文介绍了HBase中HRegion在store管理上使用跳表数据结构ConcurrentSkipListMap的原因和优势。跳表是一种随机化的数据结构,允许高效的搜索、插入和删除操作,其性能与红黑树等平衡树相当。文章详细讲解了跳表的结构、搜索、插入和删除过程,以及如何通过丢硬币的方式决定元素的层数,讨论了跳表的高度和空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习HBase源码时发现HRegion在sotre管理上用到了跳表数据结构ConcurrentSkipListMap:

ConcurrentSkipListMap有几个ConcurrentHashMap不能比拟优点

1ConcurrentSkipListMapkey是有序的。

2ConcurrentSkipListMap支持更高的并发。

ConcurrentSkipListMap的存取时间是logN),和线程数几乎无关。

也就是说在数据量一定的情况下,并发的线程越多,ConcurrentSkipListMap越能体现出他的优势。




为什么选择跳表

目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。

 

想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树

出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,

还要参考网上的代码,相当麻烦。

 

用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,

它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表,

就能轻松实现一个 SkipList。

 

有序表的搜索

考虑一个有序表:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值