Kapitola 21. Persistentn� datab�zov� spojen�
Trval� spojen� jsou SQL spojen�, kter� se nezav�raj� na konci pr�b�hu skriptu.
P�i po�adavku na trval� spojen� PHP nejd��ve zkontroluje, jestli u� neexistuje
identick� spojen� (kter� z�stalo otev�eno z d��v�j�ka) - a pokud existuje,
pou�ije ho. Pokud neexistuje, PHP ho otev�e. "Identick�" spojen� je spojen�,
kter� bylo otev�eno se stejn�m serverem, u�ivatelsk�m jm�nem a heslem (pokud
je zad�te).
Pozn�mka:
Existuj� i dal�� roz���en�, kter� vytv��� trval� spojen�,
nap��klad
Roz���en� IMAP.
Lid�, kte�� nejsou d�kladn� obezn�meni se zp�sobem, jak�m web servery funguj�
a distribuuj� z�t�, mohou pokl�dat trval� spojen� za n�co ��m nejsou. Zvl�t�
neumo��uj� otv�r�n� "u�ivatelsk�ch sessions" na stejn�m
SQL spojen�, neumo��uj� efektivn� tvorbu transakc�, a
neumo��uj� spoustu dal��ch v�c�. Dokonce, aby o tom bylo opravdu a d�kladn� jasno,
v�m trval� spojen� nedaj� ��dnou funkcionalitu,
kter� by nebyla mo�n� s jejich netrval�mi prot�j�ky.
Pro�?
To je d�no zp�sobem, jak�m funguj� webov� servery. Jsou t�i zp�soby, jak�mi
v� web server m��e vyu��t PHP ke generov�n� webov�ch str�nek.
Prvn� metodou je pou��t PHP jako CGI "obal". V tomto re�imu se vytv���
a ni�� jedna instance PHP interpretru pro ka�d� po�adavek (na PHP strn�nku)
na va�em web serveru. Proto�e je zni�ena po obslou�en� po�adavku, v�echny
zdroje, kter� z�sk� (jako t�eba spojen� s datab�zov�m serverem) jsou p�i
jej�m zni�en� zav�eny. V tomto p��pad� pokusem o pou�it� trval�ch spojen� nic
nez�sk�te - prost� nevydr��.
Druhou, a nejpopul�rn�j��, metodou, je provozovat PHP jako modul v
multiprocesn�m web serveru, co� je mno�ina, kter� v sou�asnosti obsahuje
pouze Apache. Multiprocesn� web server m� typicky jeden proces (rodi�e),
kter� ��d� skupinu proces� (sv�ch d�t�), kter� d�laj� vlastn� pr�ci -
serv�ruj� str�nky. Ka�d� po�adavek, kter� p�ijde od klienta, je obslou�en
jedn�m z d�t�, kter� pr�v� neobsluhuje jin�ho klienta. To znamen�, �e kdy�
stejn� klient vznese dal�� po�adavek na stejn� server, tento m��e b�t
obslou�en jin�m d�tsk�m procesem ne� ten prvn�. Trval� spojen� zaji��uj�, aby
se ka�d� d�tsk� proces musel na v� SQL server p�ihl�sit pouze p�i prvn�m
odesl�n� str�nky, kter� takov� spojen� vyu��v�. Kdy� spojen� s SQL serverem
vy�aduje dal�� str�nka, m��e pou��t spojen�, kter� toto d�t� otev�elo u�
d��ve.
Posledn� metodou je pou��t PHP jako plug-in v multivl�knov�m web serveru. Aktu�ln� PHP 4 m� tuto podporu pro ISAPI, WSAPI a NSAPI
(na Windows), co� umo�nuje pou��vat PHP jako plug-in v multivl�knov�ch serverech
jako Netscape FastTrack (iPlanet), Microsoft Internet Information Server (IIS),
a O'Reilly's WebSite Pro. Chov�n� je stejn�
jako u multiprocesn�m modelu popsan�m d��ve. Podpora pro SAPI nen� dostupn� v PHP 3.
Pokud trval� spojen� neposkytuj� ��dnou p�idanou funkcionalitu, k �emu jsou
dobr�?
Odpov�� na tuto ot�zku je velmi jednoduch� - efektivita. Trval� spojen� jsou
dobr�, pokud m� tvorba spojen� s va��m SQL serverem vysokou re�ii. Re�ln�
v��e t�to re�ie z�le�� na mnoha faktorech. Nap��klad jak� je to typ datab�ze,
jestli s�dl� na stejn�m po��ta�i jako v� webserver, jak zat�en� je stroj,
na kter�m v� SQL server b�� a tak d�le. Pointa je, �e pokud je spojovac�
re�ie vysok�, trval� spojen� v�m znateln� pomohou. Umo�n� d�tsk�mu procesu
p�ipojit se pouze jednou za cel� jeho �ivotn� cyklus m�sto ka�d�ho zpracov�n�
str�nky, kter� vy�aduje spojen� s SQL serverem. To znamen�, �e ka�d� d�t�,
kter� otev�elo trval� spojen�, bude m�t otev�en� vlastn� trval� spojen� se
serverem. Pokud nap��klad m�te 20 d�tsk�ch proces�, kter� spustily skript,
kter� otev�el trval� spojen� s va��m SQL serverem, m�te 20 nez�visl�ch spojen�
s SQL serverem, po jednom z ka�d�ho d�t�te.
V�imn�te si nicm�n�, �e to m��e m�t nev�hody, pokud pou��vate datab�zi s
omezen�m po�tem p�ipojen�, kter� trval� spojen� d�t� p�ekro��. Pokud m� va�e
datab�ze limit 16 sou�asn�ch p�ipojen�, a v ru�n�m okam�iku se pokus� p�ipojit
17 d�tsk�ch proces�, jednomu se to nepoda��. Pokud m�te ve sv�ch skriptech
chyby, kter� br�n� zav�r�n� spojen� (nap�. nekone�n� smy�ky), datab�ze s
pouh�mi 32 spojen�mi bude brzy zaplavena. Vyhledejte si v dokumentaci va��
datab�ze informace o obsluze opu�t�n�ch nebo ne�inn�ch spojen�.
Varov�n� |
Zde je n�kolik dodate�n�ch n�mitek, kter� se usadily v mysli b�hem
pou��v�n� trval�ch spojen�. Jedna z nich je, kdy� pou��v�te zamknut�
tabulky p�i trval�m spojen� a skript z jak�hokoli d�vodu nem��e
uvolnit z�mek, pak n�sleduj�c� skript, kter� pou��v� stejn� spojen�,
bude nejsp�e na trvalo zablokov�n a mo�n� bude nutn�, abyste
poka�d� restartovali http server nebo datab�zov� server.
D�le pak v p��pad� pou�it� transakc� se transak�n� blok p�enese i do
dal��ho skriptu pou��vaj�c�ho stejn� spojen�, pokud jeho vykon�n�
kon�� d��ve ne� transak�n� blok. V ka�d�m p��pad� m��ete pou��t
register_shutdown_function() k registraci a
jednoduch�mu vy�i�t�n� funkce pro odemknut� tabulek nebo zru�en�
b��c� transakce (roll back). Nejl�pe se probl�mu vyvarujete �pln�
nepou��v�n�m trval�ch spojen� ve skriptech, ve kter�ch se zamykaj�
tabulky nebo pou��vaj� transakce (m��ete je st�le pou��vat na
mnoh�ch dal��ch m�stech).
|
D�le�it� souhrn. Trval� spojen� byla navr�ena tak, aby odpov�dala jedna k
jedn� norm�ln�m spojen�m. To znamen�, �e byste v�dy m�li
b�t schopni nahradit trval� spojen� netrval�mi beze zm�ny fungov�n� va�eho
skriptu. M��e to (a pravd�podobn� bude) m�t vliv na
efektivitu tohoto skriptu, ale ne jeho chov�n�!
D�le tak�:
fbsql_pconnect(),
ibase_pconnect(), ifx_pconnect(),
imap_popen(), ingres_pconnect(),
msql_pconnect(), mssql_pconnect(),
mysql_pconnect(), OCIPLogon(),
odbc_pconnect(), Ora_pLogon(),
pfsockopen(), pg_pconnect() a
sybase_pconnect().