【LevelDB】LevelDB 中的各种 key
LevelDB 中的 key 有很多种,但都是各种组合。
LevelDB 是一个 key-value 存储引擎,用户输入一个 key-value 对进行存储,这里用户的 key-value 对中的 key 我们称为 user_key
。
实际上,我们是将 key-value 一起存储的,而在 LevelDB 中的删除操作也是以追加写的形式添加的,所以需要用一个 Type 类型标注一个 key-value 对是 Put 操作还是 Delete 操作 ,此外,为了进行版本控制和数据一致性,添加了 SequenceNumber 作为每个 key-value 对的写入序号,标记写入先后顺序。这部分是一个 Record ,我们将 user_key
与 Type 和 SequenceNumber 一起称为 internal_key
,用于在内存中表示。
|user_key|sequence(7字节)|type(1字节)|
此外,因为在内存中可以用 std::string 或 leveldb::Slice 等形式表示一个字符串,而在磁盘上的具体的写入,所以我们需要标注每个 internal_key
的大小,采用变长32位的整数表示一个 internal_key
的大小,这样组成的部分称为 lookup_key
。
|internal_key_size((varint, len(user_key)+8)|user_key|sequence(7字节)|type(1字节)|