`
ladymaidu
  • 浏览: 678657 次
文章分类
社区版块
存档分类
最新评论

leveldb源代码分析:SkipList

 
阅读更多

skiplist思想可以具体参考这:

或者是参考我的这篇博文:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html, leveldb中的实现方式基本上和我的那篇博文中的实现方式类似。SkipList在db/skiplist.h中声明,向外界暴漏接口非常简单,如下:


private成员变量:

我们下面来首先分析初始化操作,如下:

下面是一个插入操作的示意图:


leveldb中实现的插入代码就是按照上面的思路实现,首先查找到合适的位置,并记录查找过程中经过的路径,之后新生成一个节点,修改指针。

函数FindGreaterOrEqual中完成查询操作,就是向下(level控制)和向右(x控制)移动过程,并不断经经过路径保存到参数prev中。

查找操作基本上就是调用函数上面的函数FindGreaterOrEqual实现:

上面基本上就是skiplist在leveldb中实现,leveldb中没有使用复杂的红黑树等机制去保证数据的有序性,而是使用了轻快的skiplist实现。最后需要注意skiplist中每个节点存储key是用户传递keyvalue经过变幻(变幻方法参考http://blog.csdn.net/xuqianghit/article/details/6948164)得到的。


分享到:
评论

相关推荐

    LevelDB 学习笔记2:合并.doc

    LevelDB 学习笔记2:合并.doc

    LevelDB 学习笔记1:布隆过滤器.doc

    LevelDB 学习笔记1:布隆过滤器.doc

    leveldb-handbook:逐步分析leveldb源代码

    leveldb-handbook Leveldb-handbook是基于goleveldb项目,为读者讲述leveldb背后的系统结构及设计原理。 作者仅是在自身阅读源码的过程中不断记录与学习,若有错误之处,欢迎大家以提交PR的方式进行更正与完善! 该...

    leveldb-sharp:C# LevelDB 绑定

    leveldb-sharp 是一个可移植的 C# 绑定,用于的 C API。 支持最广泛的 leveldb-sharp 在 3-clause BSD 许可下可用,这与 LevelDB 使用的许可相同。 leveldb-sharp 使用 C API 而不是 C++ API 来实现可移植性。 ...

    LevelDB小代码

    LevelDB小代码,对leveled的oc层封装

    go-leveldb-objectstorage:使用 golang 缓存保存在对象存储中的 leveldb 的只读包装器

    (WIP)go-leveldb-objectstorage 使用 golang 缓存保存在对象存储中的 leveldb 的只读包装器 现在仅支持 AWS S3 对象存储。 go get github.com/shunsukeaihara/go-leveldb-objectstorage/osleveldb

    leveldb源码分析

    leveldb源码分析

    leveldb-1.20.tar.gz

    LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。

    leveldb代码注释.zip

    leveldb是Jeff Dean 和 Sanjay Ghemawat 两位超级大神实现的高效 kv 数据库。本资料对leveldb源码进行了详细的注释,可以帮助初学者快速的阅读源码,了解设计的思想。

    leveldb 源码解释 阅读情况

    leveldb源码分析 比较全面讲解leveldb leveldb 是 Google 开源的持久化 KV 单机存储引擎,开源页面 http://code.google.com/p/leveldb/。 针对存储面对的普遍随机 IO 问题,leveldb 采用了 merge-dump 的方式,将...

    leveldb-py:使用 ctypes 的 LevelDB Python 接口

    LevelDB 的 ctypes 绑定 现有的三个接口( 、 、 )使用 Python C API 并编译与 LevelDB 的 C++ 接口一起使用的 Python 模块。 这个 Python 模块只是简单地使用 ctypes 库到 LevelDB 的 C 接口 - 使其在 Python 实现...

    java图形界面源码-LevelDb2Avnil:将Minecraft:PocketEdition(LevelDb)地图转换为Minecraf

    request,但我不会再维护代码了,对不起。 LevelDb2Anvil 将Minecraft: Pocket Edition Maps( LevelDB ) 转换为Minecraft Maps( Anvil ) 。 信息: 最新版本(v2.0)适用于 Minecraft: Pocket Edition 1.0 或更高...

    redis-storage:把leveldb嵌入到redis.实现真正的数据持久存储

    最新版本redis:2.6.14leveldb:1.10.0snappy:1.1.0更新说明新增配置项:rl:ttl 0 ( 单位:秒,大于0时会强制设置redis里key的过期时间,仅对rl系列命令有效) rl:ttlcheck 0 (当key的ttl在小于此值时被读取到,则过期...

    levelDB源码分析记录1

    levelDB源码分析记录1

    php-leveldb:LevelDBPHP绑定

    您可以从os发行版中安装leveldb: $ sudo apt-get install libleveldb-dev 或者您可以从以下获取leveldb: : $ git clone https://github.com/google/leveldb.git $ cd leveldb $ cmake . $ make 安装 $ git ...

    leveldb-shell:一个简单的LevelDB Shell

    建造请使用以下命令从源代码构建外壳工具: gradle clean distTar用法执行./bin/leveldb-shell以启动外壳程序。 一个参数,它是LevelDB数据库文件的根目录的路径。 如果LevelDB数据库文件不存在,则会在此处创建一个...

    leveldb-tools:从syndtrLevelDB转储的工具

    目的 leveldb-tools提供了一种简单的方法...从类似cdbmake的源加载 leveldb-tools load my.leveldb <my.cdbmake 例如,cznic的数据库可以cdbmake格式转储: kvaudit -d my.kvdb | leveldb-tools load my.leveldb

    leveldb-darwin:适用于macOS的Google LevelDB

    leveldb-darwin 适用于Mac / iOS的入门使用要使用Carthage将leveldb-darwin集成到您的Xcode项目中,请在您的Cartfile指定它: github "cybertk/leveldb-darwin" ~> 1.18使用 要使用CocoaPods将leveldb-darwin集成到...

    leveldb-server:由ZeroMQ支持的LevelDB异步服务器和客户端

    leveldb服务器 由ZeroMQ支持的LevelDB的异步服务器和客户端。 依存关系 安装LevelDB 参考 安装ZeroMQ 请参考 Instanll pyzmq pip install pyzmq 安装pyleveldb pip install leveldb 入门指南 启动服务器 python ...

    leveldb-windows

    Windows下编译LevelDB 环境:windows x64 编译器: VC2010

Global site tag (gtag.js) - Google Analytics