Forum Webscript.Ru

Программирование => Perl => Тема начата: Chs от 09 Апреля 2002, 16:20:38

Название: Производительность модулей: DBI vs Mysql
Отправлено: Chs от 09 Апреля 2002, 16:20:38

#!/usr/bin/perl

use Benchmark qw(cmpthese);

cmpthese(1000,{\'DBI\'=> \\&selDBI, \'MySql\'=> \\&selMysql});

sub selDBI()
{
use DBI;
my $dbh=DBI->connect("DBI:mysql:database=test;host=localhost","root",\'\',{RaiseError=>1});

$sth=$dbh->prepare_cached("select * from test");
$sth->execute();

while(my @ar=$sth->fetchrow_array())
{
}

$dbh->disconnect();
}

sub selMysql {
use Mysql;

my $dbh = Mysql->connect(\'localhost\',\'test\',\'root\',\'\');

my $sth=$dbh->query("select * from test");
while(my @arr=$sth->fetchrow())
{
}
undef $dbh;
}

---------- Perl Run ----------
Benchmark: timing 1000 iterations of DBI, MySql...
       DBI: 160 wallclock secs (160.17 usr +  0.00 sys = 160.17 CPU) @  6.24/s (n=1000)
     MySql: 181 wallclock secs (181.58 usr +  0.00 sys = 181.58 CPU) @  5.51/s (n=1000)
        Rate MySql   DBI
MySql 5.51/s    --  -12%
DBI   6.24/s   13%    --
Normal Termination
Output completed (5 min 48 sec consumed).

Вот так! DBI - рулит! :))
Название: Производительность модулей: DBI vs Mysql
Отправлено: Chs от 09 Апреля 2002, 16:51:26
Creator
Цитировать
Я думаю, ты уже догадался, что речь идет о форуме, а именно о iB3.0.2. Я регулярно общаюсь с одним из разработчиков оного, и то мне и сообщил, что с сиквеловской базой он будет работать несколько быстрее, но выигрыш можно получить только в слкчае, если база имеет "на борту" более 10 тыс. записей. Скажем так, я ему поверил на-слово, так как человек он авторитетный.

А я не поверил.:) В документации ясно написано что модуль Mysql реализован через DBI.
Итак:
select count(*) from test
10995
#!/usr/bin/perl

use Benchmark qw(cmpthese);

cmpthese(10,{\'DBI\'=> \\&selDBI, \'MySql\'=> \\&selMysql});

sub selDBI()
{
use DBI;
my $dbh=DBI->connect("DBI:mysql:database=test;host=localhost","root",\'\',{RaiseError=>1});

$sth=$dbh->prepare_cached("select * from test");
$sth->execute();

while(my @ar=$sth->fetchrow_array())
{
}

$dbh->disconnect();
}

sub selMysql {
use Mysql;

my $dbh = Mysql->connect(\'localhost\',\'test\',\'root\',\'\');

my $sth=$dbh->query("select * from test");
while(my @arr=$sth->fetchrow())
{
}
undef $dbh;
}
---------- Perl Run ----------
Benchmark: timing 10 iterations of DBI, MySql...
       DBI: 163 wallclock secs (162.19 usr +  0.00 sys = 162.19 CPU) @  0.06/s (n=10)
     MySql: 179 wallclock secs (179.39 usr +  0.00 sys = 179.39 CPU) @  0.06/s (n=10)
      s/iter MySql   DBI
MySql   17.9    --  -10%
DBI     16.2   11%    --
Normal Termination
Output completed (5 min 46 sec consumed).


Т.е. выигрыш DBI примерно те же 10%, как и на маленьких базах.

Обкурился разработчик IB и гонит.:)))
Название: Производительность модулей: DBI vs Mysql
Отправлено: Kostya от 09 Апреля 2002, 17:37:24
To Chs:
Согласен.
Нельзя доверять"авторитетам".
Название: Производительность модулей: DBI vs Mysql
Отправлено: Green Kakadu от 10 Апреля 2002, 03:32:46
2Chs
;) хы, а ты где тесты проводил?
Помнишь, я тут недавно тесты map vs foreach кидал.
Там у меня под Win map в 9 раз быстрее, у тебя на 30% медленее, а под linux map оказался тоже несколько медленее.

Я к тому, что если вышеприведенные тесты были под win то стоит под *nix потестить - может ситуация несколько изменится (  ;) не удивлюсь, если отрыв увеличится)
Название: Производительность модулей: DBI vs Mysql
Отправлено: Chs от 10 Апреля 2002, 09:13:30
Цитировать
Я к тому, что если вышеприведенные тесты были под win то стоит под *nix потестить - может ситуация несколько изменится ( не удивлюсь, если отрыв увеличится)

У меня нет сейчас доступного nix сервера с Mysql.
Но я тоже думаю, что отрыв скорее увеличиться.:))
Название: Производительность модулей: DBI vs Mysql
Отправлено: NeoNox от 10 Апреля 2002, 11:35:19
Цитировать
Но я тоже думаю, что отрыв скорее увеличиться.

FreeBSD/MySQL 3.22.27
:) Выигрыш DBI получился на маленькой БД (одна таблица, две колонки, одна запись) ~19-20% а на большой (место база занимает 875мега) разброс большой получился. От 4 до 37(!)%.
Название: Производительность модулей: DBI vs Mysql
Отправлено: Chs от 10 Апреля 2002, 11:41:05
Цитировать
FreeBSD/MySQL 3.22.27

NeoNox, спасибо!
37% - вообще впечатляет.:))
Название: Производительность модулей: DBI vs Mysql
Отправлено: NeoNox от 10 Апреля 2002, 11:56:30
Цитировать
вообще впечатляет.

меня тоже, но думаю этот показатель нельзя брать за основу. В среднем так и осталось 10-20% ...
Название: по поводу теста
Отправлено: Green Kakadu от 11 Апреля 2002, 04:22:56
Вот еще интересно, во время тестирования
в подпрограммах
use DBI; и use Mysql;
.. подключение модулей выполняется на каждой итерации или все-таки один раз (в самой первой итерации)?
т.к. MySql он же и себя + DBI подгружает
(кстати, может оно у меня так конечно, но это он через require делает)