快照 - Snapshots

快照在键值存储的整体状态上提供了一致的只读视图。ReadOptions::snapshot可能是non-NULL,表示读取操作在特定的DB版本状态上进行的。如果ReadOptions::snapshotNULL,则读取操作将在当前状态上进行隐式的快照操作。

快照是通过DB::GetSnapshot方法进行创建的:

  1. leveldb::ReadOptions options;
  2. options.snapshot = db->GetSnapshot();
  3. ... apply some updates to db ...
  4. leveldb::Iterator* iter = db->NewIterator(options);
  5. ... read using iter to view the state when the snapshot was created ...
  6. delete iter;
  7. db->ReleaseSnapshot(options.snapshot);

注意:当一个快照长期不用时,应该通过DB::ReleaseSnapshot接口释放它。这样既可以让底层实现丢弃那些为支持该快照的读取操作而进行维护的一些状态数据。