WriteBatch是leveldb提供批量写入的工具,writebatch中保存有若干用户的输入k-v,writebatch组织这些k-v,并最终将其写入memtable。
writebatch主要的成员变量是一个string rep_,用户k-v按照以下格式保存在 rep中
-
writebatch类提供的主要功能包括
-
写入一个key ,put
像rep_中增加一个k-v结构
-
删除一个key ,delete
向rep_中增加一个k-v结构,类别是删除
-
遍历此writebatch ,iterator
这是writebatch一个很灵活的接口,其参数是一个内部接口,handler,handler有put和delete两个接口方法,iterator方法解码rep_并根据value/delete,来调用handler的put和delete方法。所以当writebatch的使用者需要遍历writebatch中的k-v时,需要继承handler类,自己实现put,delete方法
WriteBatchInternal类
writeBatchInternal提供了一系列的静态方法,操作writebatch类,比如获取writebatch当前的byte size,k-v count,连接两个write batch等,此类的主要目的是为了将内部方法屏蔽起来,不暴露给用户,用户仅仅需要使用writebatch类
-
其主要的方法包括
-
InsertInto(const WriteBatch* b, MemTable* memtable)
此类将b中的k-v写入memtable中,其中用到了writebatch类的iterator方法,上面说过,使用iterator方法之前,需要继承handler并且自己定义put delete方法,此处便定义了handler的子类,MemtableInserter,并且定义put方法和delete方法,分别向memtable插入和删除数据。