Объединяет ли соединение БД все, что важно?

В мире Java довольно стандартно для серверов приложений для объединения «дорогих» ресурсов, таких как соединения с БД. С другой стороны, в динамических языках большинство стеков имеют мало общего с объединенными ресурсами и особенно с соединениями DB.

Например, для популярного компилятора PHP + MySQL я редко видел, что он используется с постоянным соединением, которое можно считать соединенным с пустым соединением.

Если концепция объединения соединений с БД не так широко реализована, означает ли это, что повышение производительности / масштабируемости может оказаться не столь важным в реальных развертываниях?

Related of "Объединяет ли соединение БД все, что важно?"

Основной причиной пула соединений является накладные расходы при установлении соединения в первом случае. Я видел, что это заняло до 0,5 секунды в прошлом.

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

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

Если концепция объединения соединений с БД не так широко реализована, означает ли это, что повышение производительности / масштабируемости может оказаться не столь важным в реальных развертываниях?

Это просто означает, что для PHP нет встроенного пула соединений. Не означает, что вы не можете его использовать, хотя, например, с Postgres вы можете использовать PGPool.

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

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

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

Проблема с постоянными соединениями заключается в том, что они никогда не закрываются до тех пор, пока процессы клиента не умрут. Клиентские процессы на самом деле являются веб-сервером, обрабатывающим запросы PHP. Таким образом, если вы настроите свой веб-сервер на ограничение количества одновременных запросов, вы также ограничите количество открытых постоянных подключений к базе данных. Вы можете сделать это в Apache, установив параметр MaxClients на разумное значение, которое не исчерпывает ОЗУ сервера.

BTW, было бы также целесообразно перенести весь ваш статический контент (CSS, JavaScript, изображения и т. Д.) На отдельный многопоточный веб-сервер (Nginx, lighttpd и т. Д.), Поэтому одновременный доступ пользователей не сделает вашу вилку Apache для многих процессов.