原子更新 - Atomic Updates
注意:上面的操作如果进程在Put key2
和Delete key1
两个操作之间结束,那么这两个键将存储相同的值。因此,尽可能使用WriteBatch
类来避免这类问题:
#include "leveldb/write_batch.h"
...
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.ok()) {
leveldb::WriteBatch batch;
batch.Delete(key1);
batch.Put(key2, value);
s = db->Write(leveldb::WriteOptions(), &batch);
}
WriteBatch
对象保存对数据库进行的一系列操作,然后在这一批次中按照顺序应用这些操作。注意:这里先进行Delete
操作,然后再进行Put
操作,是因为在key1
和key2
相同的情况下不会错误的将该值丢弃。
WriteBatch
类除了原子性的优势外,也可以用于通过将大量个体变动放置在同一批次中而加速批量更新。
当前内容版权归 kevins.pro 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 kevins.pro .