简介 基于跳表,支持并发,有序的哈希表。 跳表 红色路径为寻找结点F。 拿空间换时间,时间复杂度,O(nlogn). 源码分析 内部类 Node 属性 构造方法 核心方法 Index 属性 构造方法 核心方法 HeadIndex 属性 构造方法 核心方法 initialize() doPut(K, ...
分类:
其他好文 时间:
2018-05-08 23:54:07
阅读次数:
206
记下自己对跳表SkipList的理解。 SkipList采用空间换时间的思想,通过增加数据间的链接,达到加快查找速度的目的。 数据库LevelDB和RocksDB中用到了SkipList,Redis中的有序set即zset也用到了SkipList。Java中也提供了ConcurrentSkipLis ...
分类:
其他好文 时间:
2018-04-15 19:41:02
阅读次数:
189
前言 对于跳表,我想大家都不陌生吧,这里不多解释,感兴趣的小伙伴可以看我的这篇文章:http://www.cnblogs.com/haolujun/archive/2012/12/24/2830683.html。 这段时间在做我们拍搜的优化,今天我就讲讲我是如何用跳表优化检索系统的。 搜索引擎的夹角 ...
分类:
其他好文 时间:
2017-12-11 11:29:33
阅读次数:
301
为什么选择跳表 目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树 出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树, 还要参考网上的代码,相当 ...
分类:
其他好文 时间:
2017-10-17 09:59:26
阅读次数:
96
跳表算法:http://blog.jobbole.com/111731/ 基数算法:http://blog.csdn.net/lemon_tree12138/article/details/51695211 ...
分类:
编程语言 时间:
2017-09-30 17:49:31
阅读次数:
170
目录: 1.线程安全单例模式的几种实现方式 2.同步容器 3.并发容器 一、线程安全单例模式的几种实现方式 1.饿汉式(不使用同步锁,典型的用空间换时间) 运行结果: 2.懒汉式(使用同步锁,延时加载,典型的时间换空间) 运行结果: 3.双重同步锁(缩小粒度,双重检查 运行结果: 为mySingle ...
分类:
编程语言 时间:
2017-09-06 15:49:39
阅读次数:
183
leveldb中的memtable仅仅是一个封装类,它的底层实现是一个跳表。跳表是一种基于随机数的平衡数据结构。其它的平衡数据结构还有红黑树、AVL树。但跳表的原理比它们简单非常多。跳表有点像链表,仅仅只是每一个节点是多层结构,通过在每一个节点中添加向前的指针提高查找效率。例如以下图: 在/leve ...
分类:
数据库 时间:
2017-08-08 19:56:44
阅读次数:
224
索引 其实在计算机中我们早已接触过跟索引有关的东西,比如数据库里的索引(index),还有硬盘文件系统中其实也有类似的东西,简而言之,索引是一种为了方便找到自己需要的东西而设计出来的条目,你可以通过找索引找到自己想要内容的位置。索引过程是: 关键字->索引->文档。在图书馆内的书分门别类,就是一种按 ...
分类:
其他好文 时间:
2017-07-26 23:44:51
阅读次数:
226
前段时间Linux下用nmon监控程序的运行,发现CPU的使用率很高,系统态Sys的比例很高。程序的速度不是很快,怀疑和上面的原因有关。 分别使用perf record,perf report和top -H -p,pstack分析发现。2种可能性,跳表skiplist和内存大量分配回收时lru回收, ...
分类:
其他好文 时间:
2017-07-26 23:27:16
阅读次数:
163
本周数据库业界探讨最火热的话题就是MemSQL,究竟是不是“旧瓶装新酒”引发了诸多的辩论,同时也引发了究竟是产品技术重要还是DBA重要的疑问。网络中有一些关于MemSQL的介绍,基本上都是来自官方文档。在本文中,数据库行业的著名独立分析师Curt Monash也发表了他对MemSQL的看法。 Mem ...
分类:
数据库 时间:
2017-01-09 16:16:52
阅读次数:
174