2

mnesia を使用して erlang プロジェクトに取り組んでいます (一部のテーブルは RAM コピー、一部のテーブルはディスク コピー、一部のテーブルは両方)。特定の読み取り (RAM テーブル) を最適化するために、使用していた mnesia dirty_read ではなく ets ルックアップを使用し、両方のバージョンのルーチンの時間を計りました。ets ルックアップは、mnesia dirty_read よりも大幅に高速でした。

私の質問は、ets と mnesia を使用して mnesia テーブルを読み取ることに「落とし穴」または「キャッチ」があるかどうかです (そうでなければ、mnesia の読み取りが遅くなる理由はありません)。それが違いを生む場合、私は「分散型」または「ノード」を必要とせず、使用していません。言い換えれば、私は現在もこれからも、1 台のコンピューターで 1 つのノードのみを使用します。

4

1 に答える 1

3

mnesia:dirty_read は、テーブルがローカルであっても rpc 呼び出しを行います。また、現在のアクティビティ コンテキストをチェックし、ダーティ ルックアップに対してもそれを維持します。これにより、ルックアップに余分な時間が必要になります。

あなたの場合(ローカル記憶喪失を持つノードが1つしかない場合)、直接etsルックアップは機能するはずですが、実装に依存するためお勧めしません。mnesia:ets(Fun,[, Args])を使用する方が良いでしょう。

于 2015-04-29T21:34:20.347 に答える