2

leveldb データベースの正確なキーを知らないとします。

3 つのキーを挿入して、キー範囲で GetApproximateSizes を使用しようとしましたが、結果は一貫してゼロです。

では、 leveldb にキーがあるかどうかをどのように確認しますか?

4

2 に答える 2

1

leveldb scan を使用して、すべてのキーと値を出力することはできませんか。たとえば、データベース内のすべてのキーと値を出力するには、次のようにします。

  leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
  for (it->SeekToFirst(); it->Valid(); it->Next()) {
    cout << it->key().ToString() << ": "  << it->value().ToString() << endl;
  }
  assert(it->status().ok());  // Check for any errors found during the scan
  delete it;

3 つのキーを挿入したばかりで、それらはまだメモリ (memtable) 内にあり、まだファイルシステムに到達していないため、GetApproximateSizes の値はゼロになります。memtable がいっぱいになると (デフォルトでは 4MB)、最初のファイルがレベル 0 に作成されます。そのため、より大きなデータベースとより大きなキー範囲でより便利です。

あなたの場合、データが存在するファイルシステム内の唯一の場所はREDOログであり、キーが文字列の場合、dbディレクトリで「strings logfile」(Linuxの場合)を呼び出して文字列部分を出力することで簡単にチェックできますデータが入ったことを確認する簡単な方法としてキーを使用します。

于 2013-10-27T04:55:20.527 に答える