3

Python の大きなリスト、dict、または配列のパフォーマンス特性を理解するための助けを探しています。一時的に保存する必要がある約 100 万のキーと値のペアがあります (これは、来年にはおそらく 1000 万に増えるでしょう)。これらのキーは、0 から約 1.1M の範囲のデータベース ID (いくつかのギャップあり) であり、値は float です。

ページランクを計算しているので、各 ID を値 1 で初期化し、メモリ内で検索して約 10 回更新してからデータベースに保存します。

  1. データベースIDを配列/リストのインデックスとして使用すると、リストまたは配列が最速になると理論付けています。これによりギャップのあるデータ構造が作成されますが、ルックアップまたは更新がどれほど高速になるかわかりません。arraysまた、リストの代わりに使用することで大きなメリットがあるかどうかもまだわかりません。

  2. これに dict を使用するのは非常に自然で、キーと値のペアを使用しますが、最初に dict を作成するのは非常に遅く、すべてのエントリに対応するために大きくなるため、メモリを大量に消費する印象を受けます。

  3. また、SQLite がフラグを使用してこれを解決するのに適している可能性があることも読みましたが、:memory:まだあまり掘り下げていません。

とにかく、ここでいくつかのガイダンスを探しています。私が掘り下げているので、どんな考えでも大歓迎です。

4

3 に答える 3

4

辞書から始めるだけです。WinXP で実行している場合でも、 1,000 万個のキーは問題になりません。しかし、あなたがそうでないことを願っています:)

特にランダムな順序で値を更新する場合は、ディクショナリの方がコーディングが簡単で、ビルドと更新がおそらく高速になります。

多くの場合、プロトタイプのコーディングを開始し、それを使用してパフォーマンスの問題を特定することをお勧めします。ボトルネックは、データを要求している場所にある可能性が最も高いでしょう。辞書に入力したり、辞書から取得したりしません。

于 2013-09-20T16:40:58.623 に答える