Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Dmitry Tsigelnik                     2:5020/400     14 Oct 2003  12:42:34
 To : Andrew Alakozow
 Subject : Re: Mod_Perl and DB connection (Решение найдено)
 -------------------------------------------------------------------------------- 
 
 Andrew Alakozow пишет:
 
 DT>> Короче ни одного дельного совета я не увидел и нашел свое решение!
 DT>> Я написал свой DB::Pool. Решение очень простое.
 DT>> Я организовал пул в виде очереди(FIFO).
 DT>> Всего два метода get_connection и free_connection
 
 AA> В чем принципиальное отличие от Apache::DBI?
 
 В том что я могу открыть сколько угодно соединений и контролировать их 
 сам, короче Apache::DBI мне не нужен
 
 AA> Apache::DBI работает под threaded MPM, отличие от preforked в том, 
 
 что нет
 
 AA> возможности открывать соединение при создании потока. Соединение 
 
 создается
 
 AA> при обработке первого запроса в потоке.
 
 Я так и не понял, то народ говорит что одно содинение на все потоки, то
 одно соединение на поток. Так как на самом деле???
 
 AA> Или  у тебя pool общий для всех потоков? Если да, то как он 
 
 создается и
 
 AA> разделяется?
 
 Я понятие не имею как у меня на самом деле. Это все зависит от того как 
 работает mod_perl.
 
 У меня так:
 
 package DB::Pool;
 
 use strict;
 use warninigs;
 use integer;
 
 my $pool; # Эта переменная сохраняется между запросами, так сделан  
     #mod_perl, если кто не знает.
 
 sub get_connection
 {
   while(my $dbh = shift @$pool)
   {
      return $dbh if $dbh->ping;
   }
   
   DBI->connect(...)
 
 }
 
 sub free_connection
 {
   my $dbh = shift;
   
   push @$pool, $dbh if(@$pool < 20); # этa проверка что бы не 
             # переполнять pool 
 
   1;
 
 }
 
 END
 {
   undef $pool; # если так не сделать то при вызове как CGI вылезает
          # Segmentation fault(почему не знаю, глюк Perl)
 }
 
 Это упрощенная реализация. У меня на самом деле $dbh это не тот $dbh, а 
 place holder для $dbh. Я поверх там написал свои более удобные функции.
 И $pool у меня не array_ref, a hash_ref of array_ref. Это если придется 
 делать соединения с разными БД или к разным схемам одной БД. Т.е. у 
 меня хэш пулов.
 И мне вот что интересно: моя переменная $pool будет одна на все потоки 
 или на каждый она будет своя(я имею ввиду mod_perl2)????
 
 --------------------
 Dmitry Tsigelnik
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Mod_Perl and DB connection (Решение найдено)   Dmitry Tsigelnik   14 Oct 2003 12:42:34 
Архивное /ru.perl/64887acfc235.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional