leveldb研究系列四——memtable组件

在系列二我们给出leveldb读写时序,在写时候,write先写磁盘log,然后在内存插入到memtable,然后就返回。    作为leveldb的核心组件memtable是我们本篇所要给大家讲述的。首先 class memtable是对skiplist进行了封装,核心数据结构就是skiplist.我们先讲skiplistskiplist是一种随机化的数据结构,目前开源软件 Redis
摘要由CSDN通过智能技术生成

在系列二我们给出leveldb读写时序,在写<key,value>时候,write先写磁盘log,然后在内存插入到memtable,然后就返回。    作为leveldb的核心组件memtable是我们本篇所要给大家讲述的。

首先 class memtable是对skiplist进行了封装,核心数据结构就是skiplist.我们先讲skiplist

skiplist是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,它的效率和红黑树以及 AVL 树不相上下但是skiplist更适合快速插入调整的节点指针小于maxheight。

Skiplist本身是一种十分简单的数据结构

http://kenby.iteye.com/blog/1187303  这篇博文讲跳表讲的非常好,可以先看看。

leveldb对skiplist又做了封装(封装了Node)  class skiplist定义如下

namespace leveldb {

class Arena;

template<typename Key, class Comparator>
class SkipList {
 private:
  struct Node;

 public:
  // Create a new SkipList object that will use "cmp" for comparing keys,
  // and will allocate memory using "*arena".  Objects allocated in the arena
  // must remain allocated for the lifetime of the skiplist object.
  explicit SkipList(Comparator cmp, Arena* arena);

  // Insert key into the list.
  // REQUIRES: nothing that compares equal to key is currently in the list.
  void Insert(const Key& key);

  // Returns true iff an entry that compares equal to key is in the list.
  bool Contains(const Key& key) const;

  // Iteration over the contents of a skip list
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值