Где и когда нужно открыть соединение с базой данных

Я работаю над внедрением класса mysql, найденного здесь, в существующем скрипте. Скрипт почти всегда должен взаимодействовать с базой данных, даже если есть моменты, когда это не так. Какова наилучшая практика в этом случае? Должен ли я открыть соединение и оставить его открытым до конца сценария или открыть соединение, когда мне это нужно, и закрыть его, когда закончите, чтобы не открывать соединение, когда скрипт ему не нужен?

Поскольку соединения довольно дороги, как указывали другие, я бы рекомендовал использовать метод «ленивого соединения» на вашем уровне базы данных. Если вы структурировали свое приложение эффективно, ваша логика приложения не должна заботиться о том, когда соединения открыты и закрыты, поскольку это будет инкапсулировано в уровень базы данных. Уровень базы данных, когда его попросят выполнить запрос, сначала проверит, имеет ли он активное соединение, а если нет, создайте его. Таким образом вы избежите открытия подключений, которые никогда не используются, и у вас также будет хорошее разделение логики между вашим приложением и кодом базы данных.

Ну, если вы используете класс, соединение должно открываться автоматически при создании экземпляра класса или при выполнении первого запроса. Если вы никогда не используете класс, соединение не будет открыто. Хотя это хорошая практика, чтобы закрыть ее, когда она вам не нужна, не мешает ей закрываться, когда поток запроса умирает.

Это может быть плохо, если у вас нет ограничений на ресурсы, установленных в вашем файле php.ini, запрос может жить вечно и никогда не закрывать соединение.

Если у вас есть сайт трафика от среднего до высокого, вы всегда должны думать о том, чтобы использовать mysql_pconnect, чтобы всегда открывалось соединение, и вам не нужны накладные расходы при открытии каждого из них.

Обычно вам нужно только открыть соединение с вашей базой данных, когда вам нужно использовать это соединение. Поддержание связей может увеличить вероятность того, что часть вашего кода случайно или злонамеренно в результате действий других приведет к нежелательным запросам в базе данных.

В этом случае вы должны только открыть соединение, прежде чем захотите запускать свои запросы. Если у вас есть большое количество запросов, попробуйте открыть соединение как можно ближе к процессу.

Лучше, чтобы одно соединение оставалось открытым дольше, чем открывать и закрывать несколько соединений.

Если ваш код чувствителен к производительности, тогда предпочтительный метод имеет тенденцию использовать какую-то форму пула соединений и / или постоянных процессов, чтобы вы могли открыть одно соединение с базой данных, а затем использовать это соединение для обслуживания многих запросов страницы, а не для открытия нового для каждого запроса, который нуждается в нем.

Если ваш код не чувствителен к производительности, то это не имеет никакого значения.

В любом случае точное время доступа к базе данных в ходе обработки конкретного запроса не является большой причиной для беспокойства.

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