今日は仕事納めなのでコードは触らない。予定。
で、前ちょこっと触ってた
http://meta.wikimedia.org/wiki/Tugelacache
を検証。
memcacheプロトコル(といっていいものか..)でデータのset/getが
できるんだけど、同時にberkeleyDBにも保存してくれるシロモノ。
→なにが良いかというと、
[1] データが永続化できる(プロセスが再起動orダウンしてもデータが復活できる)
[2] 全データがメモリにのるわけではない(使用するメモリ量が制御できる)
の2点。キャッシュ(最悪消えてもまあ問題ないデータ)ではあるんだけど、
全部メモリに乗せるにはキツイ、でもMySQLに格納するのはいまいち気が
乗らない(?)ケースにピッタリな希ガス。
ということでコードをダウンロード&RPMパッケージ作成&インストール。
起動してみる。
tugela -d -p 11211 -u nobody -c 1024 -m 128 -f /data/testing_tugelacache/sample.db -s 2
あとはmemcacheを扱うのと同じイメージなので
こんな感じで。コードが適当なのは気にしない。方向で。
memcacheばりにメモリにset/get、そしてBDBにも直接fetchしてみる。
BDBに入るのが若干遅れるケースもある(最大 -s で指定した秒数?)けど、いい感じに動いている様子。(あと、BDBには指定した値そのものが入っているわけではなさそう。)
で、今、数万回連続でランダムなデータをset/getしてみているのだけれども...
異常にコンテキストスイッチが多く発生してパフォーマンスが出ないのですよ。
straceして追跡中です。。。orz
で、前ちょこっと触ってた
http://meta.wikimedia.org/wiki/Tugelacache
を検証。
memcacheプロトコル(といっていいものか..)でデータのset/getが
できるんだけど、同時にberkeleyDBにも保存してくれるシロモノ。
→なにが良いかというと、
[1] データが永続化できる(プロセスが再起動orダウンしてもデータが復活できる)
[2] 全データがメモリにのるわけではない(使用するメモリ量が制御できる)
の2点。キャッシュ(最悪消えてもまあ問題ないデータ)ではあるんだけど、
全部メモリに乗せるにはキツイ、でもMySQLに格納するのはいまいち気が
乗らない(?)ケースにピッタリな希ガス。
ということでコードをダウンロード&RPMパッケージ作成&インストール。
起動してみる。
tugela -d -p 11211 -u nobody -c 1024 -m 128 -f /data/testing_tugelacache/sample.db -s 2
あとはmemcacheを扱うのと同じイメージなので
<?php
$host_array = array("localhost:11211");
$key="test_key";
$value="test_value";
$db_file="/data/testing_tugelacache/sample.db";
$memcache = new Memcache;
foreach($host_array as $current){
$tmp_array = explode(":",$current);
$current_host = $tmp_array[0];
$current_port = $tmp_array[1];
if(($memcache->addServer($current_host, $current_port))===FALSE){
echo "can't connect!!!n";
}
$memcache->set($key,$value,false,30);
$data = $memcache->get($key);
echo "memcached: ";
var_dump($data);
$db_conn = dba_open($db_file, "r", "db4") or die("Could not open the database!: $db_file");
echo "BerkeleyDB: ";
echo dba_fetch($key,$db_conn);
dba_close($db_conn);
}
?>
$host_array = array("localhost:11211");
$key="test_key";
$value="test_value";
$db_file="/data/testing_tugelacache/sample.db";
$memcache = new Memcache;
foreach($host_array as $current){
$tmp_array = explode(":",$current);
$current_host = $tmp_array[0];
$current_port = $tmp_array[1];
if(($memcache->addServer($current_host, $current_port))===FALSE){
echo "can't connect!!!n";
}
$memcache->set($key,$value,false,30);
$data = $memcache->get($key);
echo "memcached: ";
var_dump($data);
$db_conn = dba_open($db_file, "r", "db4") or die("Could not open the database!: $db_file");
echo "BerkeleyDB: ";
echo dba_fetch($key,$db_conn);
dba_close($db_conn);
}
?>
こんな感じで。コードが適当なのは気にしない。方向で。
memcacheばりにメモリにset/get、そしてBDBにも直接fetchしてみる。
[testing_tugelacache]$ php test.php
memcached: string(10) "test_value"
BerkeleyDB: Z_tGx_tGtest_key720test_value
[testing_tugelacache]$
memcached: string(10) "test_value"
BerkeleyDB: Z_tGx_tGtest_key720test_value
[testing_tugelacache]$
BDBに入るのが若干遅れるケースもある(最大 -s で指定した秒数?)けど、いい感じに動いている様子。(あと、BDBには指定した値そのものが入っているわけではなさそう。)
で、今、数万回連続でランダムなデータをset/getしてみているのだけれども...
異常にコンテキストスイッチが多く発生してパフォーマンスが出ないのですよ。
straceして追跡中です。。。orz