2011年11月21日月曜日

apc_fetch() VS Memcached::get() - ローカル環境キャッシュパフォーマンス比較



ローカル環境でのキャッシュは、APCとMemcachedでどちらを使うか?
apc_fetchが手軽に利用できるのでこちらを使ってみましたが、
memcachedでいいんじゃないかと・・・気になったので計測してみました。
ただし、CLI環境です。
テスト環境(DELL PowerEdge R200改)









CPUIntel Xeon CPU X3360 2.83GHz (4core)
メモリ8GB
HDD1TB (Hitachi HDT721010SLA360)
OSCentOS 6.0 (2.6.32-71.29.1.el6.x86_64)


apcの設定



apc.enabled=On
apc.enable_cli=On
apc.shm_size="128M"



比較に使用したソースコード(PHP)


$id = 'testtest';
$test_data = array();
$mem = new Memcached();
$mem->addServer('/tmp/memcached.socket',0);

for ($i = 0; $i < 1000; $i++) {
$cur_array = array();
for ($j = 0; $j < 10; $j++) {
$cur_array[$j] = '0123456789abcdef';
}
array_push($test_data,$cur_array);
}

apc_store($id,$test_data,1000);
$mem->set($id,$test_data,1000);

$time_start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$res = apc_fetch($id);
}
$time_end = microtime(true);
$diff_apc = $time_end - $time_start;

$time_start = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$res = $mem->get($id);
}
$time_end = microtime(true);
$diff_mem = $time_end - $time_start;
echo 'APC : ' . $diff_apc . PHP_EOL;
echo 'Mem : ' . $diff_mem . PHP_EOL;



結果









関数平均処理時間(ms)
apc_fetch()10
Memcached::get5

結果は、memcachedが2倍速い
また、new MemcachedとaddServer()を毎回実行した場合でも、
0.5msほどしか影響しませんでした。
5msの違いでも、10000回実行すると50秒差が出ます。
パフォーマンス優先ならmemcachedですね。

ちなみにmemcachedでunix socketを使用していますが、
IPアドレス(127.0.0.1)でのアクセスでも同程度の処理速度となりました。
ローカル環境でtcpポートの枯渇が気になる場合は、unix socketがオススメです。




0 件のコメント:

コメントを投稿