memcached VS Tokyo Tyrant

フリーのデータベースソフトのベンチマークの,追加実験を一件加えました.
シンプルなクエリに対する高速なDBは - なぜか数学者にはワイン好きが多い


前回の結果に,ネットワークかつファイルベースのTokyo Tyrantをベンチに加えました.


moved

  • アクセスにネットワークを通す場合(ハブ経由で他のマシンにアクセスに行く場合)

<?php
  dl('memcache.so');
  error_reporting(E_ALL);
  define("MAX_LINE",100000);

  $memcache->connect('local-db-machine.jp', 1978);

  $start_time = time();
  for($i=0;$i<MAX_LINE;++$i)
  {
    $key = sprintf("%010d",$i);
    $obj = new stdClass;
    $obj->str_attr = $key;
    $memcache->set($key, $obj, false, 0) ;
  }
  for($i=0;$i<10000;++$i)
  {
    $q = sprintf("%010d",mt_rand(0,MAX_LINE-1));
    //    print_r($q."\n");
    $result = $memcache->get($q);

  }
  $end_time = time();
  printf("time=%d\n",$end_time-$start_time);

  $result = $memcache->flush();
?>

MYSQL+MYISAMMEMCACHEDTokyo Tyrant
処理時間636秒15秒18秒

  • アクセスにネットワークを通す場合(127.0.0.1を使って自分のマシンにアクセスに行く場合)

MYSQL+MYISAMMEMCACHEDToKyot Tyrant
処理時間294秒4秒5秒

<?php
  dl('memcache.so');
  error_reporting(E_ALL);
  define("MAX_LINE",100000);
  $memcache = new Memcache;
  $memcache->connect('localhost', 1978);

  $start_time = time();
  for($i=0;$i<MAX_LINE;++$i)
  {
    $key = sprintf("%010d",$i);
    $obj = new stdClass;
    $obj->str_attr = $key;
    $memcache->set($key, $obj, false, 0) ;
  }
  for($i=0;$i<10000;++$i)
  {
    $q = sprintf("%010d",mt_rand(0,MAX_LINE-1));
    //    print_r($q."\n");
    $result = $memcache->get($q);
    //    print_r($result);
  }
  $end_time = time();
  printf("time=%d\n",$end_time-$start_time);
  $result = $memcache->flush();
?>

感覚的には,1万件や10万件のハッシュレコードだと,memcacheだろうがTokyo Tyrantだろうが変わらない気配.MySQLだと一桁か二桁違いますが.

結論として,速そう!Tokyo Tyrantということで.
しかもBerkeleyDBやQDBMと違って,複数のマシンからネットワーク経由で共有ストレージとして使えますし.