Я использую mod_perl для своего веб-приложения. В настоящее время я планирую использовать базу данных mysql в сети. В каждом CGI-запросе к display_customer_transaction.cgi мой скрипт будет
- Открытие подключения к базе данных по сети
- Выполнение запроса к базе данных с помощью оператора SQL
- Анализ данных, извлеченных из базы данных
- Распечатать данные в формате HTML
- Закрыть соединение с базой данных
После некоторого профилирования я понимаю, что шаг (1) является узким местом. Следовательно, я хочу избежать открытия и закрытия соединения с базой данных для каждого запроса CGI. Мое желание: если мой первый запрос CGI открывает соединение с базой данных, мой второй входящий запрос CGI (от другого клиента) может повторно использовать первое соединение с базой данных.
Я пытался использовать Google для "Соединения с постоянными базами данных DBIX", но вряд ли нашел подходящий результат. (Изменить: это потому, что он называется DBIC, или DBIx :: Class, а не DBIX.)
Я также нахожу для соответствующей информации, используя Apache :: DBI (Однако, я собираюсь использовать DBIX, а не Apache :: DBI). Есть некоторая информация, которая смутила меня:
Модуль Apache :: DBI все еще имеет ограничение: он поддерживает постоянное соединение с базой данных для каждого процесса.
Все время моя концепция о том, как Apache обслуживает CGI-запрос, заключается в том, что
- Apache всегда будет порождать новый процесс для обслуживания входящего нового запроса CGI. Всякий раз, когда интерпретатор Perl заканчивает выполнение сценария Perl, процесс останавливается.
Итак, если модуль Apache :: DBI способен поддерживать постоянные подключения к базе данных только для каждого процесса, как мой второй запрос CGI может повторно использовать соединение, открытое первым запросом CGI?
Но вернись к моему первоначальному вопросу. Как я могу иметь постоянное соединение с базой данных DBIX в mod_perl?