Пул соединений в PHP

Можно ли кэшировать подключения к базе данных при использовании PHP, как в контейнере J2EE? Если да, то как?

Ответ 1

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

Пул соединений - это метод, при котором сервер приложений управляет соединениями. Когда приложению требуется соединение, оно запрашивает его у сервера приложений, и сервер приложений возвращает одно из объединенных соединений, если оно есть.

Мы можем сделать масштабирование соединения в php для этого, перейдите по следующей ссылке: http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

Так что нет подключения пула в php.

Как сказал Хулио, apache освобождает все ресурсы, когда запрос заканчивается для текущего запроса. Вы можете использовать mysql_pconnect, но вы ограничены этой функцией, и вы должны быть очень осторожны. Другой выбор - использовать шаблон синглтона, но ничего из этого не объединяет.

Это хорошая статья: https://blogs.oracle.com/opal/highly-scalable-connection-pooling-in-php

Также прочитайте этот http://www.apache2.es/2.2.2/mod/mod_dbd.html

Ответ 2

Стойкие соединения не похожи на объединение пулов. Постоянное соединение в php будет использоваться повторно, только если вы сделаете несколько подключений db в одном и том же контексте запроса / script. В большинстве типичных сценариев для веб-разработчиков вы будете быстрее удалять свои соединения, если используете mysql_pconnect, потому что ваш script не сможет получить ссылку на любые открытые соединения при следующем запросе. Лучший способ использовать db-соединения в php - сделать одноэлементный экземпляр объекта db, чтобы соединение повторно использовалось в контексте вашего выполнения script. Это по-прежнему по меньшей мере 1 дБ подключается по запросу, но это лучше, чем создание нескольких подключений db за каждый запрос.

В php нет реального объединения пула db из-за характера php. Php не является сервером приложений, который может сидеть там между запросами и управлять ссылками на пул открытых подключений, по крайней мере, не без какого-либо крупного взлома. Я думаю, что в теории вы могли бы написать сервер приложений в php и запустить его в качестве командной строки script, который просто сидел бы там в фоновом режиме и поддерживал бы связку подключений db и передавал ссылки на них другим вашим скриптам, но я не "Не знаю, насколько это возможно на практике, как вы передадите ссылки из вашей командной строки script на другие сценарии, и я сомневаюсь, что это будет хорошо работать, даже если вы сможете это сделать. Во всяком случае, это главным образом спекуляция. Я просто заметил ссылку, которую кто-то еще отправил в модуль apache, чтобы разрешить пул соединений для серверов допроса, таких как php. Выглядит интересно: https://github.com/junamai2000/mod_namy_pool#readme

Ответ 3

Я полагаю, вы используете mod_php, правильно?

Когда файл PHP завершает выполнение всего этого состояния, он отключается, поэтому нет пути (в PHP-коде) для объединения пулов. Вместо этого вы должны полагаться на расширения.

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

Это может быть все, что вам нужно, но это не то же самое, что и объединение пулов, поскольку нет способа указать количество подключений для поддержки.

Приветствия.

Ответ 4

Вы можете использовать MySQLi.

Для получения дополнительной информации прокрутите вниз до раздела "Пул подключений" @http://www.php.net/manual/en/mysqli.quickstart.connections.php#example-1622.

Обратите внимание, что пул соединений также зависит от вашего сервера (то есть Apache httpd) и его конфигурации.

Ответ 5

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

Но вы можете использовать "встроенный" пул соединений с помощью функции mysql_pconnect.

Ответ 6

Я хотел бы предложить PDO::ATTR_PERSISTENT

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

Ответ 7

Пул соединений работает на стороне сервера MySQL следующим образом.

  1. Если постоянное соединение включено в конфигурацию сервера MySQL, MySQL сохраняет соединение открытым и в состоянии сна после того, как запрошенный клиент (скрипт php) завершит свою работу и умрет.
  2. Когда второй запрос приходит с теми же учетными данными (то же имя пользователя, тот же пароль, тот же параметр соединения, то же имя базы данных, может быть с того же IP, я не уверен насчет IP) Затем MySQL объединяет предыдущее соединение из спящего состояния в активное состояние и позвольте клиенту использовать соединение. Это помогает MySQL сэкономить время на начальный ресурс для соединения и уменьшить общее количество соединений.

Таким образом, опция пула соединений фактически доступна на стороне сервера MySQL. В конце кода PHP нет опции. mysql_pconnect() - это просто оболочка, которая сообщает PHP не отправлять сигнал запроса на закрытие соединения в конце выполнения скрипта.