如果始终启用 WAL,则无需使用原子刷新选项。启用 WAL 后,单个 WAL 文件用于捕获对所有列族的写入;因此,恢复的数据库(通过在崩溃/恢复路径中重播 WAL 日志)保证在所有列系列中保持一致。
启用/禁用原子刷新作为数据库选项很容易。 要在启用原子刷新的情况下打开数据库,请执行以下操作:
Options options;
... // Set other options
options.atomic_flush = true;
DBOptions db_opts(options);
DB* db = nullptr;
Status s = DB::Open(db_opts, dbname, column_families, &handles, &db);
对于自动触发的刷新,RocksDB 以原子方式刷新所有列族。
对于手动刷新,应用程序必须在 DB::Flush() 中指定要原子刷新的列族列表:
w_opts.disable_wal = true;
db->Put(w_opts, cf_handle1, key1, value1);
db->Put(w_opts, cf_handle2, key2, value2);
FlushOptions flush_opts;
Status s = db->Flush(flush_opts, {cf_handle1, cf_handle2});