約 100 万個のキーと値のペアを格納するためのメモリ効率の良いデータ構造が必要です。ここで、キーは約 80 バイトの文字列で、値は約 200 バイトの文字列で、キーと値の合計サイズは約 280 MB です。また、キー、できればハッシュマップによる効率的な値の検索も必要です。メモリのオーバーヘッドはできるだけ少なくする必要があります。たとえば、280MB の有用なデータの場合、データ構造は 300MB を超える仮想メモリを使用しないでください (malloc()
オーバーヘッドとその他すべて)。使用パターンは次のとおりです。空のデータ構造から始めて、キーを変更したり、値の長さを変更したりせずに、徐々に入力します。プラスとして、データ構造は値の長さの変更をサポートする場合がありますが、100% の値のオーバーヘッドが発生します (つまり、x 値バイトの場合、x バイトが未使用のバッファー領域で一時的に無駄になる可能性があります)。
純粋な Python モジュール、組み込みの Python モジュール、またはできれば (C)Python バインディングを使用した C 実装が必要です。データ構造全体をディスクにシリアライズして、非常に迅速に読み戻すことができればと思います。
このような小さなオーバーヘッドが可能であることを証明するために、オープン アドレス指定を使用した単純な設計を作成しました。125 万要素のハッシュ テーブルには、1MB のデータ ブロックへの 4 バイトのポインターが含まれており、データ ブロックにはキーと値の長さがベースとして含まれています。 -128 ヴァリント。この設計には重要な制限があります。メモリ領域を無駄にせずにペアを削除または変更することはできません。それぞれ 280 バイトの 100 万のキーと値のペアを使用した私の計算によると、オーバーヘッドは 3.6% (10 080 000 バイト) 未満です。上記の制限はより寛大で、20 000 000 バイトのオーバーヘッドが許容されます。
http://www.pytables.org/を見つけました。これは、データの高速アクセスとメモリ効率の高いパッキングを提供します。それが私のニーズに合っているかどうかを確認するために、もっと詳しく調べなければなりません。