В PHP / MySQL следует открыть несколько соединений с базой данных или поделиться 1?

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

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

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

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

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

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

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

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

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

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

http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query

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

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

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

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