« Erlangは関数型だけど難しくない | Main | IEとCometの相性が悪い »

Friday, May 11, 2007

Erlangのデータ保存方法の速度比較

Erlangでは,データを保存する方法が色々あるので,速度を比較してみた.
チャットのログを保存することを想定して,process dictionary,ets,dets で比較.

チャットのログを1000行として,以下の方法で1000回実行させた時間を比較.

・pd: process dictionary(ログの永続化無し)
・pd_dets: process dictionary + 書き込み時に dets にも保存
・ets: ets(ログの永続化無し).named_table を使用して都度読み書き.
・dets: dets.最初に開いてそのテーブルを使い続ける.都度読み書き.
・dets_local: dets.テーブルを毎回開いて読んで書いて閉じる.

SMP無し,nativeコンパイルで,以下のような感じ.

pd: size 1000 time {4759,true}
pd_dets: size 1000 time {1816660,true}
ets: size 1000 time {1143908,true}
dets: size 1000 time {4363103,true}
dets_local: size 1000 time {12769167,true}
※単位はマイクロ秒

process dictionary が最も速い.
マニュアル的には,あまり使わない方が・・・みたいな記述があった気がするけど(グローバル変数相当だし?),速度を気にする場合は重要な感じ.

ちなみに,ベンチは単にループさせているだけで,処理を行うのは1プロセス.
こういう場合にsmpオプションを使うと,オーバーヘッドだけかかってかえって遅くなってしまう模様.

ソース:chatbench.erl

|

« Erlangは関数型だけど難しくない | Main | IEとCometの相性が悪い »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference Erlangのデータ保存方法の速度比較:

« Erlangは関数型だけど難しくない | Main | IEとCometの相性が悪い »