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

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

67 голосов
/ 02 сентября 2008

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

Ответы [ 6 ]

49 голосов
/ 29 сентября 2010

В 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

11 голосов
/ 26 апреля 2012

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

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

8 голосов
/ 02 сентября 2008

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

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

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

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

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

6 голосов
/ 07 января 2014

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

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

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

0 голосов
/ 22 марта 2019

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

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

0 голосов
/ 02 сентября 2008

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

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

...