2

これは、4 GBのRAMに収まるよりもはるかに多くのデータを格納する必要があるという事実がなければ、dictを使用できたはずのタスクです。私は同じプログラムで他のメモリを必要とする作業も行っているので、mem-requirementsは低いほど良いです。

私はただしたい

  1. 多くの文字列を保存する

  2. コレクションに文字列が含まれているかどうかを確認します

これを行うPythonの方法はありますか?私は3.3を使用しているので、berkelydbsが出ています。

また、正確な答えを出す必要があるため、ブルームフィルターはありません。

4

4 に答える 4

2

sqlite3を使用して、ニーズに完全に適合します

絶対に高速なルックアップが必要な場合は、marisa ツリーを使用できます。http://kmike.ru/python-data-structures/ を参照てください。ただし、最初に、それがアプリケーションのボトルネックであることを確認する必要があります。特にキャッシュは、ディスクデータベースで素晴らしいことを行うことができます。最適化を早めすぎないでください。プロフィール。

于 2012-11-08T18:11:23.277 に答える
2

データがメモリに収まらない場合は、選択の余地がなく、そのデータの一部を一時的に外部ストレージ (ディスク) に保存する必要があります。ご想像のとおり、ファイル アクセスは高価で低速なので、ディスク操作を最小限に抑える必要があります。

キー値ストアが必要なように思われるので (dict があるため)、ブロックをすばやく読み取れるように、関連するデータが同様の場所にあるように分割することをお勧めします。 -wise 計算用のメモリに。

しかし、それを行う方法は、実際に何をしているかによって完全に異なります。詳細な情報がなければ、私たちは本当にあなたを助けることはできません.

ところで。あなたがBerkeley DBについて言及したように、実際にはPython 3.2用のバインディングがあり、それらがPython 3.3でも機能したとしても驚かないでしょう。それ以外の場合、3.3 はまだかなり新しいため、更新が行われる可能性があります。別のキー値ストレージ データベースを探している場合は、redisを試してみてください。ただし、 Python バインディングは試していません。

于 2012-11-08T18:14:19.910 に答える
1

それを保存する必要があるだけなら、なぜそれをメモリに保持するのか、ある種のデータベースを使用してください。

于 2012-11-08T18:06:09.133 に答える
1

標準shelveモジュールを使用して永続的な辞書を作成するだけです。

于 2012-11-08T18:15:24.243 に答える