0

同様ですstd::unordered_map<std::string, std::string>が、すべてのデータはメモリではなくディスクに保存する必要があります。

私が理解しているように、インデックス作成とストレージの 2 つの部分を実行する必要があります。Linear-Hash や B-Tree など、インデックスに関するいくつかのデータ構造を学びました。ディスク上に int->int データベースを作成することはそれほど難しくありません。問題は収納です。

整数の場合、すべてのレコードが同じサイズになります。インデックス作成によって記録する位置を取得すると、簡単に抽出、変更、または遅延削除できます。ただし、文字列の場合、レコードは柔軟なサイズになります。(少なくとも) 次の問題があるはずです。

  1. put() より長い文字列: 古いレコードを単純に上書きすることはできません。あえて del() と put() を実行すると、古いレコードのスペースが無駄になります。

  2. del(): 古いレコードのスペースも浪費され、再利用できません。(ガベージコレクターで削除されたスペースを回収できるかもしれませんが、余分なスペースがかかり、フラグメントが作成されます)

  3. int->int データベースの場合、いくつかの整数のためにスペースを無駄にすることは大きな問題ではありません。しかし、文字列が長くなるほど、無駄なスペースが増えます。

問題を解決するためのアドバイス/ヒントが必要です。

4

3 に答える 3

0

私には、これはキー/値ストアの定義のように思えます。あなたは本当に好きなシステムを使うことができます。Oracle の Berkeley DB から Cassandra または Riak まで。

于 2013-04-17T06:51:21.833 に答える