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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




