|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/64887acfc235.html, оценка из 5, голосов 10
|