В PHP / MySQL я должен открыть несколько соединений с базой данных или поделиться 1? - PullRequest
10 голосов
/ 16 января 2010

Я хочу услышать, что другие думают об этом? В настоящее время я устанавливаю соединение с базой данных mysql внутри файла типа заголовка, который затем включается в начало каждой страницы моего сайта. Затем я могу выполнить столько запросов, сколько захочу для этого открытого соединения. Если страница построена из 6 включенных файлов и существует 15 различных запросов mysql, то все они будут работать на этом 1 соединении.

Теперь иногда я вижу классы, которые устанавливают несколько соединений, например, 1 для каждого запроса.

Есть ли преимущество использования одного метода над другим? Я думаю, что 1 соединение лучше, чем множественное, но я могу ошибаться?

Ответы [ 6 ]

10 голосов
/ 16 января 2010

Создание соединений может быть дорогим ( У меня пока нет ссылки на это утверждение Редактировать: Ага! Вот оно ), так что кажется как будто согласие состоит в том, чтобы использовать меньше соединений. Использование единого соединения для всех запросов на одной странице представляется лучшим выбором, чем множественные соединения.

6 голосов
/ 16 января 2010

В PHP + MySQL обычно нет особого смысла использовать несколько соединений на страницу (только медленнее и немного больше оперативной памяти).

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

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

2 голосов
/ 03 апреля 2012

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

http://www.x -developer.com / PHP-скрипты / SQL-подключение-несколько-баз-в-одном-запроса

2 голосов
/ 16 января 2010

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

Как правило, я бы рекомендовал, чтобы интерфейс веб-сайта использовал объект общей базы данных (singleton is your friend), поскольку для написания этого не требуется большой дисциплины, это разум, и вы не будете тратить время на установление связей. Если вам требуются дополнительные параллельные запросы к бэкэнду, это не должно быть слишком сложным делом, поскольку вряд ли это будет область с высокой посещаемостью.

1 голос
/ 16 января 2010

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

1 голос
/ 16 января 2010

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

  • Вы должны инициализировать базу данных несколько раз. Настройка свойств соединения при установлении соединения (например, SET NAMES UTF8) должна выполняться на нескольких линиях.
  • Это определенно медленнее, чем одно соединение.
  • Нетехническая причина: кто-то, работающий с вашим кодом, скорее всего, не ожидает этого и может часами отлаживать свойства соединения, которые он установил в другом соединении.

Наличие глобального объекта соединения (или класса, предоставляющего объект) - гораздо лучший подход в PHP.

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