有序集合有两种编码方式:压缩列表 ziplist 和跳表 skiplist。 ...
分类:
其他好文 时间:
2021-01-16 12:09:10
阅读次数:
0
承接【数据结构】跳表(SkipList)原理篇,本篇文章我们来分析下如何使用代码实现SkipList。在JDK中并没有SkipList的直接实现,当然我们可以自己写代码实现,但是为了给后面“一致性Hash算法”系列文章做铺垫, 这里我选择 ConcurrentSkipListMap 类来进行分析。 ...
分类:
其他好文 时间:
2020-12-29 11:19:49
阅读次数:
0
跳跃表:dash: 一.它是什么?:question: 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而快速访问节点的目的 二.时间复杂度:exclamation: 平均O(logN) 、 最坏O(N),还可以通过顺序性操作来批处理节点 三.什么时候用 ...
分类:
其他好文 时间:
2020-12-01 12:12:35
阅读次数:
5
什么是跳跃表跳表由WilliamPugh发明。他在论文《Skiplists:aprobabilisticalternativetobalancedtrees》中详细介绍了跳表的数据结构和插入删除等操作。跳表是一种可以用来代替平衡树的数据结构,跳表使用概率平衡而不是严格执行的平衡,因此,与等效树的等效算法相比,跳表中插入和删除的算法要简单得多,并且速度要快得多。为什么需要?性能比较好。实现相对于红黑
分类:
编程语言 时间:
2020-11-13 13:02:55
阅读次数:
17
本来打算只用一篇文章来讲解Redis中的list,在实际写作过程中发现Redis中有多种list的实现,所以准备拆成多篇文章,本文主要讲ziplist,ziplist也是quicklist的基础。另外还有skiplist,skiplist虽然是list,当主要和set命令相关,所以会放到后面。 本文 ...
分类:
其他好文 时间:
2020-10-08 18:16:17
阅读次数:
20
1.文件目录布局 Kafka消息以日志文件的形式存储,不同主题下不同分区的消息分开存储,同一个分区的不同副本分布在不同的broker上存储 逻辑上看来日志是以副本为单位的,每个副本对应一个log对象,实际在物理上,一个log划分为多个logSegment 创建一个topic为3个分区,会在log.d ...
分类:
其他好文 时间:
2020-08-05 00:12:43
阅读次数:
100
1.SkipList Redis的sortedSet数据结构是有序不重复的(索引为唯一的,数据(score)却可以重复), 跳表是redis的一个核心组件,也同时被广泛地运用到了各种缓存地实现当中,它的主要优点, 就是可以跟红黑树、AVL等平衡树一样,做到比较稳定地插入、查询与删除。理论插入查询删除 ...
分类:
其他好文 时间:
2020-07-02 16:23:09
阅读次数:
41
是什么 内存分配管理器,主要为skiplist即Memtable服务而不是整个项目。申请内存时,将申请到的内存直接放入vector中,在Arena的生命周期结束后,统一释放掉所有申请的内存,内部结构如下图: 为什么要用 避免内存碎片,skiplist里面记录的都是用户传进来的key/value,这些 ...
分类:
数据库 时间:
2020-06-09 09:51:40
阅读次数:
65
我们先回想一下Kafka的日志结构是怎样的? Kafka 日志对象由多个日志段对象组成,而每个日志段对象会在磁盘上创建一组文件,包括消息日志文件(.log)、位移索引文件(.index)、时间戳索引文件(.timeindex)以及已中止(Aborted)事务的索引文件(.txnindex)。当然,如 ...
分类:
其他好文 时间:
2020-06-08 00:17:30
阅读次数:
63
最近开始看Redis设计原理,碰到一个从未遇见的数据结构:跳跃表(skiplist)。于是花时间学习了跳表的原理,并用java对其实现。 主要参考以下两本书: 《Redis设计与实现》跳表部分:主要介绍跳表在Redis中如何实现; 《算法:C语言实现(第1~4部分)》的13.5节:介绍跳表的算法。 ...
分类:
编程语言 时间:
2020-05-06 21:50:25
阅读次数:
85