暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

10天读完LevelDB --Day2 版本控制version,key与比较器Comparator

当代孔乙己 2021-11-28
364

10天读完LevelDB --Day2 版本控制version,key与比较器Comparator

一个key的存储形式

真正的存储形式:| key size | user_key | sequence | type | value size | value |lookupkey提取出了:| key size | user_key | tag |InternalKey 是提取内部 key 储存使用的格式化后的形式:具体的格式为:| user_key | sequence | type | 后面sequence + type固定8字节ParsedInternalKey是InternalKey 解析过的内存结构

比较器

比较器也算是一种常见的设计模式了,因为LevelDB是一个KV数据库,所以比较器主要比较的是key,具体看代码:

比较器抽象基类:

// 实现类必须是线程安全的
class LEVELDB_EXPORT Comparator {
public:
virtual ~Comparator();


virtual int Compare(const Slice& a, const Slice& b) const = 0;


virtual const char* Name() const = 0;


// 两个字符串间的最短字符串
//e.g start="abc123" , limit = "abc456" 最后返回start为"abc2"
virtual void FindShortestSeparator(
std::string* start,
const Slice& limit) const = 0;


//一个字符串的下一个最短字符
//e.g key="abc123" 返回key="b"
virtual void FindShortSuccessor(std::string* key) const = 0;
};

bytewiseComparator继承此类,并做了实现,实现如上代码块注释的效果。

除了bytewiseComparator,还有InternalKeyComparator,InternalKeyComparator是对InternalKey先进行decode提取出user_key,然后再用bytewiseComparator(或用户自定义)解析。

版本控制version

version这个名字其实起的不太好,version对应了数据库的元信息。

versionSet类对应了一个version的双向链表

versionEdit类对应了一个version的log日志。


文章转载自当代孔乙己,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论