您的位置:首页 > 博客中心 > 数据库 >

leveldb源码分析--Key结构

时间:2022-03-10 17:47

【注】本文参考了的并进行了一定的重组和排版

经过上一篇文章的分析我们队leveldb的插入流程有了一定的认识,而该文设计最多的又是Batch的概念。这篇文章本来应该顺理成章的介绍Batch相关流程和结构了,但是Batch涉及到了一些编码和Key相关的概念,所以我觉得应该先理清这方面的概念有助于大家更容易理解后面的内容。

在dbformat.h/cc文件中我们首先看到的是

// Return a key suitable for lookup in a MemTable.
  Slice memtable_key() const { return Slice(start_, end_ - start_); }
// Return an internal key (suitable for passing to an internal iterator)
  Slice internal_key() const { return Slice(kstart_, end_ - kstart_); }
// Return the user key
  Slice user_key() const { return Slice(kstart_, end_ - kstart_ - 8); }

memtable_key是在查找过程中传递给SkipList的Comparator进行查找比较的时候用的,前面提到过目前默认的Comparator实现是会将其中的User key抽取出来按照字节序进行比较。

 

在这些key的组成和编码过程中我们又接触到了一些leveldb 的内部编码方式,比如Varint32(int32变长)、Fixed32等,具体编码方式在coding.cc中,这些编码方式都是根据Google的protobuffer的来的。这个协议在Google内部的数据传输中得到了广泛的使用,另外在一些电信和移动通信领域也得到了一些借鉴和发展。如果对其具体的实现细节感兴趣,可以参见

leveldb源码分析--Key结构,布布扣,bubuko.com

热门排行

今日推荐

热门手游