« 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

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/33589/15028355

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

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