RocksDBのWrite Ahead Log(WAL)

1231 ワード

Overview
RocksDBには三つの基本的なデータ構造概念があります.memtable、sstfile、logfile.
  • memtableはメモリデータ構造であり、新規に入会してmemtableを挿入して選択的にlogfileに書き込む.
  • logfileは、ディスクに順次書き込むファイルである.
  • memtableがいっぱい書いたら、flushからディスク上のsstfileになります.logfileが安全に削除されることをお知らせします.検索keysの性能を向上させるために、sstfileのデータがソートされました.
  • RocksDBに対する書き込み操作は必ず二つのところに書かれています.1)メモリベースのデータ構造memtable.2)日記-Write Ahead Log(WAL)を書き留めます.WALは異常が発生すれば、memtableのデータを完全に回復し、dbの元の状態を回復するために使用することができる.デフォルトの設定では、RocksDBはユーザーが書いた後にflush WALを使うことで、プロセスのcrash後の一貫性を保証します.
    WALのライフサイクル
    例えば、RocksDBの例dbは、二つのColumn Famile es:「newuucf」、「default」によって作成され、Column FamiriesはRocksDB 3.0において作成され、各key-value pairは少なくとも一つのColumn Famiriesに対応し、指定されていない場合は「default」に対応する.Column Famiriesは、論理的にdbを分離する方法を提供する.db openの後に、新しいWALユーザーの持続的なすべての書き込みを作成します.
    DB* db;
    std::vector column_families;
    column_families.push_back(ColumnFamilyDescriptor(
         kDefaultColumnFamilyName, ColumnFamilyOptions()));
    column_families.push_back(ColumnFamilyDescriptor(
         "new_cf", ColumnFamilyOptions()));
    std::vector handles;
    s = DB::Open(DBOptions(), kDBPath, column_families, &handles, &db);