Vra

'n bespreking oor single in PHP het my laat dink oor hierdie kwessie meer en meer. Die meeste mense onderrig dat jy 'n klomp van die DB verbindings nie moet maak in een versoek, en ek is net nuuskierig oor wat jou redenasie is. My eerste gedagte is die koste om jou script van die maak van baie versoeke om die DB, maar dan teen ek myself met die vraag: sou nie veelvuldige verbindings te maak konkurrente bevraagteken meer doeltreffende

?

Hoe gaan dit met 'n paar antwoorde (met bewyse, mense) van 'n paar mense in die ken?

Was dit nuttig?

Oplossing

Database verbindings is 'n beperkte hulpbron. Sommige DBs het 'n baie lae verband limiet, en mors verbindings is 'n groot probleem. Deur die inname van baie verbindings, kan jy die sluit van ander vir die gebruik van die databasis.

Verder, gooi 'n ton van ekstra verbindings by die DB help nie iets nie, tensy daar is hulpbronne op die DB bediener sit ledig. As jy het 8 cores en net een is wat gebruik word om 'n navraag, dan seker te bevredig, maak 'n ander verband kan help. Meer geneig is egter wat jy reeds gebruik al die beskikbare kerne. Jy is ook geneig om te slaan op dieselfde hardeskyf vir elke DB versoek, en die toevoeging van bykomende slot twis.

As u DB het iets wat lyk soos 'n hoë benutting, en voeg ekstra verbindings sal nie help nie. Dit sou wees soos paai ekstra drade in 'n aansoek by die blinde hoop dat die ekstra concurrency verwerking vinniger sal maak. Dit kan in 'n paar sekere omstandighede, maar in ander gevalle is dit sal net stadiger jy af as jy die hardeskyf thrash, tyd mors taak-skakel, en stel sinchronisasie oorhoofse.

Ander wenke

Dit is die koste van die oprigting van die verband, die oordrag van die data en dan skeur dit af. Dit sal eet jou prestasie.

Getuienis is moeiliker om te kom deur, maar let op die volgende ...

Kom ons sê dit neem x mikrosekondes na 'n verbinding te maak.

Nou wil hê jy moet 'n paar versoeke te maak en kry data heen en weer. Kom ons sê dat die verskil in vervoer tyd is negligable tussen een verbinding en baie (net ofr wille van die argument).

Kom ons sê dit neem y mikrosekondes na die verband af te sluit.

Opening een verbinding sal x + y mikrosekondes van oorhoofse neem. Opening baie sal n * (x + y) neem. Dit sal jou uitvoering vertraag.

Die opstel van 'n DB verbinding is gewoonlik baie swaar. Baie van die dinge gaan op agter die skerms (DNS resolusie / TCP-verbinding / Bladskud / verifikasie / Werklike Query) .

Ek het 'n probleem eens gehad het met 'n paar vreemde DNS opset wat elke TCP-verbinding gemaak het 'n paar sekondes voor opgaan. My login prosedure (as gevolg van 'n komplekse argitektuur) het 3 verskillende DB verbindings te voltooi. Met hierdie kwessie, is dit neem vir ewig om log-in. Ons het toe refactored die kode om dit te laat deurgaan een verbinding net.

Ons toegang Informix van NET en 'n verskeidenheid verbindings. Tensy ons 'n transaksie wat op elke verbinding, dikwels dit hanteer in die verband swembad. Ek weet dit is baie merk-spesifieke, maar die meeste (?) Databasisstelsels 'cilent toegang sal swembad verbindings na die beste van sy vermoë.

As 'n eenkant, ons het 'n probleem met verbinding telling as gevolg van kruis-databasis verbindings het. Informix ondersteun sinonieme, so ons synonymed die algemene oortreders en die veelvuldige verbindings gehanteer bediener-kant, spaar 'n baie in oordrag tyd, skepping verband oorhoofse, en (die werklike kern van ons situtation) lisensiegelde.

Ek sou aanneem dat dit is omdat julle begeertes is nie asynchroon gestuur, aangesien julle begeertes iteratief gedoen op die bediener, sluit elke keer, het jy om te betaal vir die oorhoofse van die skep van 'n verband elke keer, wanneer jy net ' om dit een keer te doen ...

In Flex, alle web diens oproepe word outomaties asynchroon genoem, sodat jy dit algemeen om veelvuldige verbindings te sien, of tou op versoeke op dieselfde verbinding.

Asynchronous versoeke te versag die verband koste deur vinniger versoek / reaksie tyd ... want jy kan nie maklik dit in PHP bereik sonder 'n paar stringe, dan is die prestasie treffer is groter as net die dieselfde verbinding hergebruik .

dit is my 2 sent ...

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top