11

FileSystem の使用に関して基本的な質問があります。組み込みの KeyValue ストアを使用したいのですが、これは非常に書き込み指向です。(永続的)値のサイズが a) 10 K b) 1 M であり、読み取りと更新の数が等しいとします

キーとして機能する値と名前を含むファイルを作成するだけです。

KeyValue ストアを LevelDB や RocksDB として使用するのと同じくらい高速ではありません。

誰でも私が理解するのを手伝ってくれませんか。

4

1 に答える 1

22

原則として、はい、ファイルシステムをキー値ストアとして使用できます。違いは、個々のユースケースと実装の制限を確認した場合にのみ発生します。

ここではあまり詳しく説明しませんが、大きく異なる点がいくつかあります。

  • ファイルシステムは、データを固定サイズのブロックに分割します。通常、2 つのファイルが同じブロックの一部を占有することはできません。一般的なブロック サイズは 4 ~ 16 KiB です。10 KiB の例で発生するオーバーヘッドを計算できます。キー/値ストアは、より小さいサイズのデータ​​を扱う傾向があります。
  • ファイルシステムのディレクトリ インデックスは、多くの場合、ファイル名/キーを並べ替え順に効率的に反復できません。特定のキーを効率的に検索できますが、ほとんどすべてのディレクトリ エントリを読み取らずに範囲を取得することはできません。LevelDB を含む一部のキー/値ストアは、効率的な順序反復をサポートしています。
  • LevelDB を含む一部のキー/バリュー ストアはトランザクション対応です。これは、複数の更新をまとめてバンドルできることを意味し、LevelDB は、これらの更新がすべて通過するか、まったく通過しないかのいずれかを確認します。これは、データの不整合を防ぐために非常に重要です。ファイルシステムでは、特に複数のファイルが関係する場合、これを実装するのがはるかに難しくなります。
  • キー/値ストアは通常、ディスク上で連続したデータを保持しようとします (そのため、シークを減らしてデータを取得できます) が、最近のファイルシステムは意図的にファイル間でこれを行いません。これは、多くのレコードを読み取るときに、パフォーマンスに深刻な影響を与える可能性があります。ただし、ソリッドステート ディスクでは問題になりません。
  • 一部のファイルシステムは圧縮機能を提供しますが、通常はファイルごとまたはブロックごとのいずれかです。私が見る限り、LevelDB はレコードのチャンク全体を圧縮するため、圧縮率が向上する可能性があります (ただし、圧縮戦略は圧縮効率よりもパフォーマンスに偏っています)。
于 2014-09-07T23:45:53.743 に答える