6

読み取りパフォーマンスに重点を置いて、それぞれ ID と Term 値を含む多数 (100,000) のエントリを含む Orddict や Proplist などの Term を作成したいと考えています。このカプセル化された Term は、Orddict ができるのと同じように、そのキーの下に格納された値を返すことができるはずです。

example:

 K001 - Term001
 K002 - Term002
 K003 - Term003

セット全体を含む結果の Term は、ディスク I/O を回避するために永続ストアに保存せずに、いくつかの計算目的で関数から関数に渡す必要があります。また、現時点ではアーキテクチャの複雑さを避けるために、この段階ではメモリ キャッシングを使用しないことを選択しました。

Orddictはキーでソートされ、通常の Dict と比較してキーのシークが強化されます。ターム内により効率的なインデックス作成メカニズムを埋め込むことができる他の Erlang モジュールを私は知りません。

Orddict よりも優れたアプローチの提案はありますか?

4

2 に答える 2

9

実際にorddictは、ソートされたリスト ( source ) として実装されているため、特にキーが昇順で挿入されている場合は、挿入と検索の両方でパフォーマンスが低下します。近づかないでください。あなたのユースケースではうまくいきません。dictハッシュベースのデータ構造であり、安定した挿入/検索パフォーマンスを提供します。キーの順序が重要な場合は、ツリーベースのマップ ( などgb_trees) を使用することを検討してください。順序付きツリー ウォークを実行することで、順序付けられたキー シーケンスを抽出できます。

于 2013-03-16T14:00:55.307 に答える
4

Erlang プロセス間で大きなデータセットを共有したい場合は、ETSを試すことができます。これは、破壊的な更新のみをサポートする高速なインメモリ キー値ストアです。

于 2013-03-18T09:41:39.470 に答える