WriteBatch-levelDB源码解析

来源:互联网 发布:学编程哪里好 编辑:程序博客网 时间:2024/06/03 15:25

将key  value数据按照一定格式,批量组装起来,并提供处理的接口。

【数据成员介绍】

rep_:格式如下图所示,


sequence number:此次批量写入的开始序列号;

count:代表这一批中有多少条记录,

record:代表一条记录,第一个字节代表类型,是增加或修改一条记录,还是删除一条记录,紧接着就是key(用key的长度和key的内容分开表示),value(用value的长度和value的内容分开表示)


【方法成员介绍】

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. void WriteBatch::Put(const Slice& key, const Slice& value)  
作用:将一条key  value按照record的格式,追加到rep_;


[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. void WriteBatch::Delete(const Slice& key)  

作用:将一条删除的记录按照record的格式,追加到rep;


[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. Status WriteBatch::Iterate(Handler* handler) const  

作用:迭代操作器,通过传入handler,来将rep_里面搜集的记录,进行处理,具体怎么处理由handler决定,但这个handler一定是实现了下面的接口

[cpp] view plain copy
 print?
  1. class Handler {  
  2.  public:                 
  3.   virtual ~Handler();    
  4.   virtual void Put(const Slice& key, const Slice& value) = 0;  
  5.   virtual void Delete(const Slice& key) = 0;  
  6. };                       
  7. Status Iterate(Handler* handler) const;  


比如,handler有可能是MemTableInserter,那么就将这些record写入内存。这种将数据与处理分开的设计,使扩展性很强。

0 0