Автор Тема: Производительность модулей: DBI vs Mysql  (Прочитано 3421 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/

#!/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 - рулит! :))
2B OR NOT 2B = FF

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Производительность модулей: DBI vs Mysql
« Ответ #1 : 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 и гонит.:)))
2B OR NOT 2B = FF

Оффлайн Kostya

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Производительность модулей: DBI vs Mysql
« Ответ #2 : 09 Апреля 2002, 17:37:24 »
To Chs:
Согласен.
Нельзя доверять"авторитетам".

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Производительность модулей: DBI vs Mysql
« Ответ #3 : 10 Апреля 2002, 03:32:46 »
2Chs
;) хы, а ты где тесты проводил?
Помнишь, я тут недавно тесты map vs foreach кидал.
Там у меня под Win map в 9 раз быстрее, у тебя на 30% медленее, а под linux map оказался тоже несколько медленее.

Я к тому, что если вышеприведенные тесты были под win то стоит под *nix потестить - может ситуация несколько изменится (  ;) не удивлюсь, если отрыв увеличится)
« Последнее редактирование: 10 Апреля 2002, 03:49:06 от Green Kakadu »
 в исканиях.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Производительность модулей: DBI vs Mysql
« Ответ #4 : 10 Апреля 2002, 09:13:30 »
Цитировать
Я к тому, что если вышеприведенные тесты были под win то стоит под *nix потестить - может ситуация несколько изменится ( не удивлюсь, если отрыв увеличится)

У меня нет сейчас доступного nix сервера с Mysql.
Но я тоже думаю, что отрыв скорее увеличиться.:))
2B OR NOT 2B = FF

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Производительность модулей: DBI vs Mysql
« Ответ #5 : 10 Апреля 2002, 11:35:19 »
Цитировать
Но я тоже думаю, что отрыв скорее увеличиться.

FreeBSD/MySQL 3.22.27
:) Выигрыш DBI получился на маленькой БД (одна таблица, две колонки, одна запись) ~19-20% а на большой (место база занимает 875мега) разброс большой получился. От 4 до 37(!)%.
The documentations is your friend

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Производительность модулей: DBI vs Mysql
« Ответ #6 : 10 Апреля 2002, 11:41:05 »
Цитировать
FreeBSD/MySQL 3.22.27

NeoNox, спасибо!
37% - вообще впечатляет.:))
2B OR NOT 2B = FF

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Производительность модулей: DBI vs Mysql
« Ответ #7 : 10 Апреля 2002, 11:56:30 »
Цитировать
вообще впечатляет.

меня тоже, но думаю этот показатель нельзя брать за основу. В среднем так и осталось 10-20% ...
The documentations is your friend

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
по поводу теста
« Ответ #8 : 11 Апреля 2002, 04:22:56 »
Вот еще интересно, во время тестирования
в подпрограммах
use DBI; и use Mysql;
.. подключение модулей выполняется на каждой итерации или все-таки один раз (в самой первой итерации)?
т.к. MySql он же и себя + DBI подгружает
(кстати, может оно у меня так конечно, но это он через require делает)
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28