1 / 5
文档名称:

leveldb源码剖析之snapshot原理赖明星.doc

格式:doc   大小:25KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

leveldb源码剖析之snapshot原理赖明星.doc

上传人:学习的一点 2021/7/25 文件大小:25 KB

下载得到文件列表

leveldb源码剖析之snapshot原理赖明星.doc

文档介绍

文档介绍:leveldb源码剖析之snapshot原理赖明星
注意:本文转载自小和尚的藏经阁,无任何修改。
Snapshot(快照)关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
快照的作用主要是能够进行在线数据备份与恢复1
leveldb也提供了快照。对于整个key-value存储状态,Snapshot提供了一致性只读视图。ReadOptions::snapshot不为NULL时表示读取数据库的某一个特定版本。如果Snapshot为NULL,则读取数据库的当前版本。
通常Snapshots通过方法DB::GetSnapshot()创建:
leveldb::ReadOptions options;
= db->GetSnapshot();
... apply some updates to db ...
leveldb::Iterator* iter = db->NewIterator(options);
... read using iter to view the state when the snapshot was created
...
delete iter;
db->ReleaseSnapshot();
注意,当snapshot不再使用时,需要用DB::RealeaseSnapshot释放。这样底层就可以释放支持Snapshot的资源。
写操作也可以返回一个应用了一系列更新之后的Snapshot:
leveldb::Snapshot* snapshot;
leveldb::WriteOptions write_options;
= &snapshot;
leveldb::Status status = db->Write(write_options, ...);
... perform other mutations to db ...
leveldb::ReadOptions read_options;
= snapshot;
leveldb::Iterator* iter =
db->NewIterator(read_options);
... read as of the state just after the Write call returned ...
delete iter;
db->ReleaseSnapshot(snapshot);
leveldb中的Snapshot是如何实现的呢?
我们知道leveldb是只增加的数据库,在一定的时间范围内leveldb并不删除数据,它记录了所有的操作。比如:
table["liming"] = 18
del table["liming"]
table["wangdong"] = 85
table["wangdong"] = 30
转换成leveldb内部操作为:
liming 1 kTy