rev40のq4mを使ってベンチマーク。といっても単純にSELECTとINSERTのベンチのみ。
このスクリプトに対して、128、256、512アイテムでテスト
俺のMac 10.5で他のブラウザとか動かしながらでこんな感じ。
うーん、queue_wait()にWHERE使えると嬉しいなぁ・・・
use strict;
use warnings;
use DBI;
use Time::HiRes qw(time);
my $TEST_ROWS = $ENV{TEST_ROWS} || 1024;
my $dbh = DBI->connect(
$ENV{DBI} || 'dbi:mysql:database=test;host=localhost',
$ENV{DBI_USER} || 'root',
$ENV{DBI_PASSWORD} || '',
) or die 'connection failed:';
$dbh->do('drop table if exists q4m_t');
$dbh->do('create table q4m_t (v int not null) engine=queue');
my $insert_time = 0;
my $select_time = 0;
my $insert = $dbh->prepare("insert into q4m_t (v) values (?)");
for (my $i = 0; $i < $TEST_ROWS; $i++) {
my $start = time();
$insert->execute($i);
$insert_time += time() - $start;
}
my $sth = $dbh->prepare("select queue_wait('test.q4m_t')");
for(0..$TEST_ROWS - 1) {
my $start = time();
if ($sth->execute()) {
my $h = $sth->fetchrow_hashref();
} else {
last;
}
$select_time += time() - $start;
}
$dbh->do('select queue_end()');
print STDERR "$TEST_ROWS items used\n";
print STDERR " avg insert time: ", $insert_time / $TEST_ROWS, "\n";
print STDERR " avg select time: ", $select_time / $TEST_ROWS, "\n";
このスクリプトに対して、128、256、512アイテムでテスト
daisuke@beefcake q4m$ env TEST_ROWS=128 perl queue.pl
128 items used
avg insert time: 0.0969786122441292
avg select time: 0.0974297747015953
daisuke@beefcake q4m$ env TEST_ROWS=256 perl queue.pl
256 items used
avg insert time: 0.107754170894623
avg select time: 0.115405934862792
daisuke@beefcake q4m$ env TEST_ROWS=512 perl queue.pl
512 items used
avg insert time: 0.0976005531847477
avg select time: 0.0964000821113586
俺のMac 10.5で他のブラウザとか動かしながらでこんな感じ。
うーん、queue_wait()にWHERE使えると嬉しいなぁ・・・