2009-05-06 22 views
18

Ich plane, MYSQL zu verwenden. Gibt es eine Connection-Pooling-Erweiterung? Oder was ist die normale Verbindungspraxis? Ist das die, in jedem verwendet, wo ...PHP-Verbindung Pooling Mysql

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

Menschen Verwenden mysql_connect oder pconnect nur normal ..? Wie besser ist pconnect und welche Einstellung sollte ich für PConnect tun?

Antwort

21

haben Sie jemals mysql_pconnect() verwendet? mysql_pconnect() wirkt sehr ähnlich wie mysql_connect() mit zwei großen Unterschieden.

Zuerst versucht die Funktion beim Verbindungsaufbau, zuerst einen (persistenten) Link zu finden, der bereits mit demselben Host, Benutzernamen und Passwort geöffnet ist. Wenn eine gefunden wird, wird eine ID zurückgegeben, anstatt eine neue Verbindung zu öffnen.

Zweitens wird die Verbindung zum SQL-Server nicht geschlossen, wenn die Ausführung des Skripts beendet wird. Stattdessen bleibt der Link für die zukünftige Verwendung geöffnet (mysql_close() schließt keine Links, die durch mysql_pconnect() festgelegt wurden).

Diese Art der Verknüpfung daher wird als 'persistent'

Check it here

1

Es gibt 3 Verbindungsfunktionen:

mysql_connect: normale Verbindung, kein Pooling können Sie nicht gespeicherte Prozeduren execute (nur sql)

mysql_pconnect: gepoolte Verbindung, können Sie nicht ausführen s Tored Verfahren (nur SQL)

mysqli_connect: normale Verbindung, kein Pooling können Sie gespeicherte Prozeduren ausführen (benötigt MySQL 5 oder höher)

mysqli_pconnect: gibt es nicht. Es gibt keine in Verbindung Funktion eingebaut sowohl gespeicherte Prozeduren Handhabung und

Mein Rat Pooling (über Erfahrung und Surfen):

Wenn Sie gespeicherte Prozeduren benötigen, lassen Sie bündeln und nutzen mysqli_connect

Wenn Sie nicht brauchen, Stored Procedures, Verwendung mysql_pconnect

2

Dies ist eine alte Frage, aber ich wollte meine zwei Cent hinzufügen, als ich das gleiche Thema betrachtete. Ab PHP 5.3 unterstützt mysqli persistente Verbindungen, Sie müssen nur p: vor den Hostnamen setzen.

Wenn Sie mit Apache arbeiten, haben Sie versucht, das Verbindungspooling mit mysql über das Apache mod_dbd-Modul zu untersuchen? Es unterstützt das Verbindungspooling für MySQL.http://httpd.apache.org/docs/2.2/mod/mod_dbd.html

+0

Dank für die unter Hinweis auf den ‚p:‘ Host-Präfix für persistente Verbindungen erfordert ** PHP Version 5.3 **. Habe dieses kleine Nugget nirgendwo sonst gefunden. –

9

Persistent-Verbindungs ​​war in PHP eingeführt 5.3 für die Mysqli Erweiterung. Unterstützung war bereits vorhanden in PDO MYSQL und ext/mysql. Die Idee hinter persistenten Verbindungen ist, dass eine Verbindung zwischen einem Client-Prozess und einer Datenbank von einem Client-Prozess wiederverwendet werden kann, anstatt mehrere Male erstellt und zerstört werden. Dies reduziert den Aufwand für die Erstellung von frischen Verbindungen jedes Mal, wenn erforderlich ist, da nicht verwendete Verbindungen zwischengespeichert und wiederverwendet werden können.

Im Gegensatz zur mysql-Erweiterung bietet mysqli keine separate Funktion zum Öffnen persistenter Verbindungen. Um eine persistente Verbindung zu öffnen, müssen Sie p: an den Hostnamen voranstellen, wenn verbinden.

Quelle: http://www.php.net/manual/en/mysqli.persistconns.php

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

edit: Sorry für die Betrogene, nicht die anderen Antworten sehen.

4

Verwenden Sie anstelle der alten mysql-Erweiterung die Erweiterung mysqli oder PDO.

man kann sagen, die mysqli_connect oder mysqli::__construct persistente Verbindung zu verwenden, wenn Sie Ihre Hostnamen mit ‚p:‘ Präfix

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