你也可以通过我的独立博客 —— https://www.huliujia.com/blog/3c240f2a7b 获取本篇文章
简介
LevelDB的官方注释是这么介绍WriteBatch的:
WriteBatch holds a collection of updates to apply atomically to a DB
如何保证原子性可能需要看完对WriteBatch的使用才能理清楚,这里只能确定一个WriteBatch对象可以包含多条更新记录(插入/删除),支持批量写入。
WriteBatch的很多操作是通过辅助类来实现的,辅助类会直接操作WriteBatch的成员变量,本文会先介绍WriteBatch的成员变量和这些辅助类,最后介绍WrteBatch的成员函数
WriteBatch的成员变量
WriteBatch只有一个成员,是个字符串类型。所有更新记录都会编码后写入到这个 rep_ 中。
std::string rep_;
rep_ 的编码格式如下:
字节数 | 8字节 | 4字节 | 变长 | 变长 | 变长 | 变长 |
---|---|---|---|---|---|---|
内容 | sequence | count | record 1 | reocrd 2 | record 3 | record … |
sequence是一个64bit的序列号,每个WriteBatch都有一个唯一序列号。
count为rep_包含的record(更新记录)数量。
count后面是record列表,每个record的编码格式相同,格式如下:
字节数 | 1字节 | 变长 | key size | 变长 | value size |
---|---|---|---|---|---|
内容 | ValueType | key size | key | value size | value |
key size和value size使用的是LevelDB的变长编码格式
WriteBatchInternal 辅助类
WriteBatchInternal没有成员变量,只有成员函数。
SetCount与Count
void WriteB