В мире Java довольно стандартно для серверов приложений для объединения «дорогих» ресурсов, таких как соединения с БД. С другой стороны, в динамических языках большинство стеков имеют мало общего с объединенными ресурсами и особенно с соединениями DB.
Например, для популярного компилятора PHP + MySQL я редко видел, что он используется с постоянным соединением, которое можно считать соединенным с пустым соединением.
Если концепция объединения соединений с БД не так широко реализована, означает ли это, что повышение производительности / масштабируемости может оказаться не столь важным в реальных развертываниях?
Основной причиной пула соединений является накладные расходы при установлении соединения в первом случае. Я видел, что это заняло до 0,5 секунды в прошлом.
В высокой транзакционной среде способность поддерживать соединение открытым и отправлять несколько запросов по соединению одна за другой имеет значительную экономию. Таким образом, вы можете не видеть прибыли в базе данных с низкой транзакцией, но ваше приложение также не будет масштабироваться, если вы проигнорируете этот полезный шаблон.
Это также помогает значительно упростить количество открытых подключений.
Если концепция объединения соединений с БД не так широко реализована, означает ли это, что повышение производительности / масштабируемости может оказаться не столь важным в реальных развертываниях?
Это просто означает, что для PHP нет встроенного пула соединений. Не означает, что вы не можете его использовать, хотя, например, с Postgres вы можете использовать PGPool.
Мое общее мнение состоит в том, что пулы соединений обычно не используются в средах, где скорость не считается столь же важной, как и другие проблемы. Например, AOLServer использует динамический язык (Tcl), но обладает высокой производительностью и использует пулы соединений.
Опрос соединений часто используется, поскольку некоторые поставщики баз данных ограничивают количество подключений, которые у вас есть к данной базе данных, в зависимости от вашей лицензии. Базы данных с открытым исходным кодом не имеют таких ограничений, поскольку они бесплатны. Так что это не большая проблема для MySQL.
Еще одна причина использования опроса подключений – ограничить количество текущих подключений к серверу базы данных, поскольку каждое новое соединение потребляет много памяти, и вы не хотите исчерпывать память своих серверов.
Проблема с постоянными соединениями заключается в том, что они никогда не закрываются до тех пор, пока процессы клиента не умрут. Клиентские процессы на самом деле являются веб-сервером, обрабатывающим запросы PHP. Таким образом, если вы настроите свой веб-сервер на ограничение количества одновременных запросов, вы также ограничите количество открытых постоянных подключений к базе данных. Вы можете сделать это в Apache, установив параметр MaxClients на разумное значение, которое не исчерпывает ОЗУ сервера.
BTW, было бы также целесообразно перенести весь ваш статический контент (CSS, JavaScript, изображения и т. Д.) На отдельный многопоточный веб-сервер (Nginx, lighttpd и т. Д.), Поэтому одновременный доступ пользователей не сделает вашу вилку Apache для многих процессов.