Apache::DBI

Краткое описание Apache::DBI

Одна из проблем обычных cgi-скриптов в том, что они не позволяют поддерживать постоянное соединение с базой данных (БД).

Во время выполнения каждого запроса скрипт создает новое соединение с БД, выполняет некоторую работу и закрывает соединение. Процесс подключения к БД занимает много времени. Обеспечивая постоянное соединение с БД, можно существенно сократить время выполнения скриптов и нагрузку на сервер.

При использовании с mod_perl, Apache::DBI позволяет поддерживать соединение с БД в течении всего времени жизни процесса mod_perl. Соответственно, при поступлении нового запроса, процессу нет необходимости устанавливать новое соединение и можно сразу приступать к работе.

Подключение Apache::DBI, httpd.conf:

Модуль 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 вообще никаких изменений в скрипты вносить не нужно.

Apache::DBI: 2 комментария

  1. zusu

    спасибо за инфу, а то задолбался из скриптов disconnect удолять

  2. zusu

    и еще: а кук разоравть соединение, если disconnect не работает?

Комментарии запрещены.