« 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

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


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

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