Где и когда нужно открыть соединение с базой данных
Я работаю над тем, чтобы использовать класс mysql, найденный здесь в существующем script. script почти всегда необходимо взаимодействовать с базой данных, даже если есть моменты, когда это не так. Какова наилучшая практика в этом случае? Должен ли я открыть соединение и оставить его открытым до конца script или мне нужно открыть соединение, когда оно мне понадобится, закрыв его, когда я закончил, чтобы не открывать соединение, когда script ему не нужно
Ответы
Ответ 1
Поскольку соединения довольно дороги, как указывали другие, я бы рекомендовал использовать метод "ленивого соединения" на вашем уровне базы данных. Если вы структурировали свое приложение эффективно, ваша логика приложения не должна заботиться о том, когда соединения открыты и закрыты, поскольку это будет инкапсулировано в уровень базы данных. Уровень базы данных, когда его попросят выполнить запрос, сначала проверит, имеет ли он активное соединение, а если нет, создайте его. Таким образом, вы избежите открытия подключений, которые никогда не используются, и у вас также будет хорошее разделение логики между вашим приложением и кодом базы данных.
Ответ 2
Хорошо, если вы используете класс, соединение должно открываться автоматически при создании экземпляра класса или при выполнении первого запроса. Если вы никогда не используете класс, соединение не будет открыто. Хотя это хорошая практика, чтобы закрыть его, когда он вам не нужен, не мешает ему закрываться, когда поток запроса умирает.
Это может быть плохо, если у вас нет ограничений на ресурсы, установленных в вашем файле php.ini, запрос мог бы жить вечно и никогда не закрывать соединение.
Если у вас есть сайт трафика от среднего до высокого, вы должны подумать об использовании mysql_pconnect в любом случае, чтобы всегда открывалось соединение и вам не нужны накладные расходы при открытии одного из них по каждому запросу.
Ответ 3
Обычно вам нужно только открыть соединение с вашей базой данных, когда вам нужно использовать это соединение. Поддержание связей может увеличить вероятность того, что часть вашего кода случайно или злонамеренно посредством действий других приведет к нежелательным запросам в базе данных.
В этом случае вы должны открыть соединение только до того, как захотите запустить свои запросы. Если у вас большое количество запросов, попробуйте открыть соединение как можно ближе к этому процессу.
Лучше, чтобы одно соединение оставалось открытым дольше, чем открывать и закрывать несколько соединений.
Ответ 4
Если ваш код чувствителен к производительности, тогда предпочтительный метод имеет тенденцию использовать некоторую форму пула соединений и/или постоянных процессов, чтобы вы могли открыть одно соединение с базой данных, а затем использовать это соединение для обслуживания многих запросов страницы, а не открывая новое соединение для каждого запроса, который нуждается в нем.
Если ваш код не чувствителен к производительности, тогда это не имеет никакого значения.
В любом случае точное время доступа к базе данных в процессе обработки конкретного запроса не является большой причиной для беспокойства.
Моя личная практика заключается в том, чтобы сразу же открыть соединение с базой данных при возникновении нового процесса обработчика, а затем проверить, что он все еще жив, когда я начинаю обрабатывать каждый запрос. В остальной части кода можно просто предположить, что соединение доступно по мере необходимости, не прибегая к стоимости подключения, пока пользователь ждет ответа.