4
enum ValueType {
kTypeDeletion = 0x0,
kTypeValue = 0x1
};
6. SequnceNnumber (db/dbformat.h)
leveldb 中的每次更新(put/delete)操作都拥有一个版本,由 SequnceNumber 来标识,整个 db 有一个
全局值保存着当前使用到的 SequnceNumber。SequnceNumber 在 leveldb 有重要的地位,key 的排序,
compact 以及 snapshot 都依赖于它。
typedef uint64_t SequenceNumber;
存储时,SequnceNumber 只占用 56 bits, ValueType 占用 8 bits,二者共同占用 64bits(uint64_t).
7. user key
用户层面传入的 key,使用 Slice 格式。
8. ParsedInternalKey (db/dbformat.h)
db 内部操作的 key。db 内部需要将 user key 加入元信息(ValueType/SequenceNumber)一并做处理。
struct ParsedInternalKey {
Slice user_key;
SequenceNumber sequence;
ValueType type;
};
9. InternalKey (db/dbformat.h)
db 内部,包装易用的结构,包含 userkey 与 SequnceNumber/ValueType。
10. LookupKey (db/dbformat.h)
db 内部在为查找 memtable/sstable 方便,包装使用的 key 结构,保存有 userkey 与
SequnceNumber/ValueType dump 在内存的数据。
class LookupKey {
…
private:
const char* start_;
const char* kstart_;
const char* end_;
};
LookupKey:
userkey_data
(userkey_len)
SequnceNumber/ValueType
(uint64)
对 memtable 进行 lookup 时使用 [start,end], 对 sstable lookup 时使用[kstart, end]。
11. Comparator (include/leveldb/comparator.h util/comparator.cc)
对 key 排序时使用的比较方法。leveldb 中 key 为升序。