原子更新 - Atomic Updates
原子更新 - Atomic Updates
注意:上面的操作如果进程在Put key2和Delete key1两个操作之间结束,那么这两个键将存储相同的值。因此,尽可能使用WriteBatch类来避免这类问题:
1. #include "leveldb/write_batch.h"2. ...3. std::string value;4. leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);5. if (s.ok()) {6. leveldb::WriteBatch batch;7. batch.Delete(key1);8. batch.Put(key2, value);9. s = db->Write(leveldb::WriteOptions(), &batch);10. }
WriteBatch对象保存对数据库进行的一系列操作,然后在这一批次中按照顺序应用这些操作。注意:这里先进行Delete操作,然后再进行Put操作,是因为在key1和key2相同的情况下不会错误的将该值丢弃。
WriteBatch类除了原子性的优势外,也可以用于通过将大量个体变动放置在同一批次中而加速批量更新。
