Краткое описание Apache::DBI
Одна из проблем обычных cgi-скриптов в том, что они не позволяют поддерживать постоянное соединение с базой данных (БД).
Во время выполнения каждого запроса скрипт создает новое соединение с БД, выполняет некоторую работу и закрывает соединение. Процесс подключения к БД занимает много времени. Обеспечивая постоянное соединение с БД, можно существенно сократить время выполнения скриптов и нагрузку на сервер.
При использовании с mod_perl, Apache::DBI позволяет поддерживать соединение с БД в течении всего времени жизни процесса mod_perl. Соответственно, при поступлении нового запроса, процессу нет необходимости устанавливать новое соединение и можно сразу приступать к работе.
Подключение Apache::DBI, httpd.conf:
|
1 |
PerlModule Apache::DBI |
Модуль DBI и Apache::DBI
Модуль DBI может работать совместно с Apache::DBI. При загрузке модуль DBI проверяет значение переменной окружения $ENV{MOD_PERL} и был ли уже загружен модуль Apache::DBI. Если результат положительный, модуль DBI при каждом вызове connect(), отправляет запрос Apache::DBI.
Когда Apache::DBI получает запрос connect(), он проверяет, есть ли у него готовый connect() с теми же аргументами. Если есть, то следует проверка на работоспособность текущего соединения с БД, с помощью метода ping(). Если проверка прошла успешно, Apache::DBI немедленно возвращает данные дескриптору клиента. Если соединение было оборвано, Apache::DBI старается установить новое соединение, сохраняет указание на него и возвращает данные пользователю.
Важно отметить, что соединения с БД не разделяются между процессами. Каждый процесс имеет собственный пул соединений.
Если Вы только начинаете использование Apache::DBI, нет необходимости удалять из кода вызовы функции disconnect(). Apache::DBI перегружает данную функцию пустым методом. В результате, при вызове disconnect() не выполняется никаких действий.
Для работы с Apache::DBI и DBI вообще никаких изменений в скрипты вносить не нужно.
спасибо за инфу, а то задолбался из скриптов disconnect удолять
и еще: а кук разоравть соединение, если disconnect не работает?