LevelDB源码解析(5) WriteBatch

本文详细解析LevelDB的WriteBatch类,包括其成员变量、WriteBatchInternal辅助类、MemTableInserter以及成员函数。WriteBatch用于批量更新数据库,确保原子性。文章介绍了如何通过编码和解码实现WriteBatch的记录存储,以及如何将更新插入到MemTable中。
摘要由CSDN通过智能技术生成

你也可以通过我的独立博客 —— 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值