2009-05-06 2 views
18

Я планирую использовать MYSQL. Имеется ли расширение пула соединений? Или какая нормальная практика для подключения? ли это одна используется в каждом где ...php connection pooling mysql

mysqli_connect("localhost", "xxx", "xxx", "test"); 

ли использовать только нормальные люди mysql_connect или pconnect ..? Насколько лучше pconnect и какую настройку следует использовать для PConnect?

ответ

21

Вы когда-нибудь использовали mysql_pconnect()? mysql_pconnect() действует очень как mysql_connect() с двумя основными отличиями.

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

Во-вторых, подключение к серверу SQL не будет закрыто при завершении выполнения скрипта. Вместо этого ссылка останется открытой для будущего использования (mysql_close() не будет закрывать ссылки, установленные mysql_pconnect()).

Этот тип связи поэтому называется «стойким»

проверить его here

1

Есть 3 соединительные функции:

mysql_connect: нормальное соединение, не пулы, вы не можете выполнять хранимые процедуры (только sql)

mysql_pconnect: объединенное соединение, вы не можете выполнить s tored процедуры (только SQL)

mysqli_connect: нормальное соединение, не пулы, вы можете выполнять хранимые процедуры (требуется MySQL 5 или выше)

mysqli_pconnect: НЕ СУЩЕСТВУЕТ. не Там будет никакого встроенные в функции соединения и обработки хранимых процедур и объединение

Моего совета (через опыт и серфинг):

Если вам нужны хранимые процедуры, пропускаются объединения и использовать mysqli_connect

Если вам не нужно хранимые процедуры, использование mysql_pconnect

2

Это старый вопрос, но я хотел добавить свои два цента, так как я смотрел на эту же проблему. Начиная с PHP 5.3, mysqli поддерживает постоянные соединения, вам просто нужно добавить p: в начало имени хоста.

Если вы используете Apache, попробовали ли вы посмотреть на пул соединений с mysql через модуль Apache mod_dbd? Он поддерживает объединение пулов для MySQL.http://httpd.apache.org/docs/2.2/mod/mod_dbd.html

+0

Спасибо за отметив «р:» префикс хоста для постоянных соединений требует ** PHP версии 5.3 **. Не нашли этого маленького самородка где-нибудь еще. –

9

Стойкая поддержка соединения была введена в PHP 5.3 для Mysqli расширения. Поддержка уже присутствовала в PDO MYSQL и ext/mysql. Идея за постоянными подключениями заключается в том, что соединение между клиентским процессом и база данных может быть повторно использована клиентом-процессом , а не , созданным и уничтоженным несколько раз. Это уменьшает накладные расходы при создании свежих подключений каждый раз, когда требуется , так как неиспользуемые соединения кэшируются и готовы к повторному использованию.

В отличие от расширения mysql, mysqli не предоставляет отдельную функцию для открытия постоянных подключений. К открыть постоянное соединение, вы должны preend p: к имени хоста, когда подключение.

Источник: http://www.php.net/manual/en/mysqli.persistconns.php

sample code: 
$GLOBALS["mysqli"] = new mysqli('p:localhost', 'username', 'password', 'db_name'); 

редактировать: Извините за боян, не видели другие ответы.

4

использовать mysqli или расширение PDO вместо старого расширения mysql.

вы можете сказать mysqli_connect или mysqli::__construct использовать постоянное соединение, если вы префикс вашего хоста с «р»:

http://php.net/manual/en/mysqli.construct.php