Где и когда открыть соединение с базой данных - PullRequest
15 голосов
/ 14 июля 2009

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

Ответы [ 4 ]

13 голосов
/ 14 июля 2009

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

2 голосов
/ 14 июля 2009

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

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

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

1 голос
/ 14 июля 2009

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

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

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

0 голосов
/ 14 июля 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...