leveldb WriteBatch

Introduction

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// WriteBatch holds a collection of updates to apply atomically to a DB.
//
// The updates are applied in the order in which they are added
// to the WriteBatch. For example, the value of "key" will be "v3"
// after the following batch is written:
//
// batch.Put("key", "v1");
// batch.Delete("key");
// batch.Put("key", "v2");
// batch.Put("key", "v3");
//
// Multiple threads can invoke const methods on a WriteBatch without
// external synchronization, but if any of the threads may call a
// non-const method, all threads accessing the same WriteBatch must use
// external synchronization.

doc解释的很清楚了, 重点a collection of updates, 至于保证原子操作, 与db write操作有关, 保证中间不会插入其他update。

1
2
// WriteBatchInternal provides static methods for manipulating a
// WriteBatch that we don't want in the public WriteBatch interface.

对WriteBatch的操作是由WriteBatchInternal提供的, 比较重点的是InsertInto, 通过这个方法, 会把writebatch里的updates写到memtable里

Implementation Details

1
2
3
4
5
6
7
8
9
10
// WriteBatch::rep_ :=
// sequence: fixed64
// count: fixed32
// data: record[count]
// record :=
// kTypeValue varstring varstring |
// kTypeDeletion varstring
// varstring :=
// len: varint32
// data: uint8[len]

WriteBatch内部保存updates的格式