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
| Permalink
|
Comments