meerdere php requests en sql queries

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Wout boer

wout boer

13/10/2014 14:22:52
Quote Anchor link
Hoi hoi,

Ik ben een app developer en gebruik php->sql zodat gebruikers informatie kunnen toevoegen en ophalen.

Nu gebruikte ik eerder per sql query een apart php script.
Echter heb ik nu een manier gevonden waarop ik automatisch in php een juiste query kan generen
en ik dus maar 1 script nodig heb om al mijn quaries uit te krijgen (wat mij een hoop tijd scheelt, omdat ik niet per query een nieuw script hoef te schrijven wat die uitvoert).

Alleen wil ik dit nu in al mijn apps gebruiken, voor elke knop die iets doet waarvoor sql nodig is.
De informatie word dan wel uit verschillende tabels gehaald, maar alle requests worden gegeneerd en doorgestuurd via 1 php script. (als ik informatie terug wil ontvangen, gaat dit via een echo, die ik in mijn app weer omzet in de juiste elementen)

Oftewel dit kan dus betekenen dat ik 100 requests tegelijk krijg op hetzelfde php script.
Nu mijn vraag: als 100 mensen tegelijk informatie opvragen, via hetzelfde php script, wat een echo geeft van de informatie, gaat dit dan door elkaar lopen? kan dit? levert het wel problemenen op als 100 mensen tegelijk iets schrijven via hetzelfde php script etc?

Hoop dat het een beetje duidelijk is wat bedoel :)
 
PHP hulp

PHP hulp

27/12/2024 23:05:16
 
Peter  Flos

Peter Flos

13/10/2014 14:42:48
Quote Anchor link
Als 100 mensen 100 query's op eenzelfde seconde proberen te verkrijgen is de kans groot dat je SQL Server down gaat. Je zult (in de meeste gevallen) een error krijgen met To Many Connections:
http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Maar dat ligt uiteraard aan je server, hoe die instellingen staan en hoeveel die aankunnen.
 
Wout boer

wout boer

13/10/2014 14:48:53
Quote Anchor link
Peter Flos op 13/10/2014 14:42:48:
Als 100 mensen 100 query's op eenzelfde seconde proberen te verkrijgen is de kans groot dat je SQL Server down gaat. Je zult (in de meeste gevallen) een error krijgen met To Many Connections:
http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Maar dat ligt uiteraard aan je server, hoe die instellingen staan en hoeveel die aankunnen.


maar het maakt verder niet uit of dit allemaal via 1 php scripts verloopt of via een aantal verschillende php scripts?

Hoe is het dan mogelijk dat stel je heb 1mil gebruikers (i wish), die allemaal door pagina's aan t bladeren zijn op je app (waarvan de informatie allemaal via queries gehaalt moet worden) dat het dan alsnog blijft draaien?
 
- Ariën  -
Beheerder

- Ariën -

13/10/2014 15:05:28
Quote Anchor link
Meerdere of zwaardere database-servers gebruiken (meer RAM), en caching gebruiken.
 
Peter  Flos

Peter Flos

13/10/2014 15:05:51
Quote Anchor link
Uiteraard maakt dat wel uit. Zie het onderstaande voorbeeld:

- Er zijn 100 mensen
- Er zijn 20 pagina's
- Er zijn 50 standaard query's, waarbij er op elke pagina nog 10 nodig zijn

Dan krijg je dit:
(50 + 10) x 100
Anders krijg je:
100 x 100

Stel, even als voorbeeld. Het is een app waarbij je een Account hebt, en er een Premium is (Denk aan Spotify), met een verloop datum.
Op de pagina met Volgers hoef je niet met een Query te achterhalen of iemand premium heeft, omdat je die informatie daar niet gebruikt.

Als iets 1 miljoen gebruikers heeft, zal die het niet snel met 1 Server redden.

Toevoeging:
Zie ook wat Aar zegt, dat is ook een oplossing.
Gewijzigd op 13/10/2014 15:06:18 door Peter Flos
 
Ozzie PHP

Ozzie PHP

13/10/2014 15:20:29
Quote Anchor link
Wat is eigenlijk het maximaal aantal database-requests per pagina-aanroep? Wat is een goede richtlijn?
 
Peter  Flos

Peter Flos

13/10/2014 15:23:28
Quote Anchor link
Dat ligt aan de instellingen van je server, volgens mij kan je met PHP.ini dat zelfs aanpassen.

Ik zeg altijd: haal niet meer op dan nodig is. Als je 100 requests nodig hebt, heb je die gewoon nodig. Als je er 20 nodig hebt maar er 100 gebruikt, dan is het zonde dat je server ervan traag (kan) worden.
 
Ozzie PHP

Ozzie PHP

13/10/2014 15:26:19
Quote Anchor link
>> Dat ligt aan de instellingen van je server, volgens mij kan je met PHP.ini dat zelfs aanpassen.

Oké, maar dat bedoelde ik niet. Ik bedoelde dus... op een normale site, bijv. zoals deze... hoeveel database-requests worden er dan gedaan. Wat is gemiddeld? Praat je over 1 tot 10, of eerder 30 tot 50? Ik kan me voorstellen dat als je 50 requests per keer doet dat je site dan traag wordt? Of niet? Dus vandaar mijn vraag of er een soort van "maximum" is om te voorkomen dat je je eigen site onderuit trekt.
 
Wout boer

wout boer

13/10/2014 15:28:49
Quote Anchor link
Peter Flos op 13/10/2014 15:05:51:
Uiteraard maakt dat wel uit. Zie het onderstaande voorbeeld:

- Er zijn 100 mensen
- Er zijn 20 pagina's
- Er zijn 50 standaard query's, waarbij er op elke pagina nog 10 nodig zijn

Dan krijg je dit:
(50 + 10) x 100
Anders krijg je:
100 x 100

Stel, even als voorbeeld. Het is een app waarbij je een Account hebt, en er een Premium is (Denk aan Spotify), met een verloop datum.
Op de pagina met Volgers hoef je niet met een Query te achterhalen of iemand premium heeft, omdat je die informatie daar niet gebruikt.

Als iets 1 miljoen gebruikers heeft, zal die het niet snel met 1 Server redden.

Toevoeging:
Zie ook wat Aar zegt, dat is ook een oplossing.


ok oftewel een server kan het niet aan als er simpelweg teveel queries zijn?
Hoe doet een druk bezocht forum dit dan bijvoorbeeld?
Maar goed als dat gewoon een hardware limiet is kan ik er niet zoveel aan doen, ik wil voornamelijk zorgen dat mijn scripts niet voor problemen gaan zorgen later.

even terug komend op mijn php vraag:
stel je doet exact even veel queries, heeft het nut om deze te verdelen over zeg 10 scripts of kan ik zonder problemen alles via 1 php script dit oplossen? (kon dit niet uit je antwoord opmaken)
Het scheelt me namelijk veel werk (anders moet ik voor elke query een apart php script maken).

(als ik het via een script doe kan ik namelijk variable doorsturen vanwaaruit hij in php automatisch de juiste query statement maakt)
 
Ozzie PHP

Ozzie PHP

13/10/2014 15:31:22
Quote Anchor link
Wat bedoel je met 1 script en 10 scripts? Wat versta jij onder een script?

Je moet proberen met zo min mogelijk queries zoveel mogelijk van de gewenste data binnen te halen.
 
Peter  Flos

Peter Flos

13/10/2014 15:37:04
Quote Anchor link
@Ozzie: Ik schat tussen de 10 en de 30, nogal globaal genomen. 50 queries per keer zeggen niet dat je site traag wordt. Dat hangt af van hoeveel personen er zijn en wanneer die klikken. (Als iemand 1 seconde later klikt als de voorganger, scheelt het al)
Dus een echt Maximum is er niet, omdat dat afhangt van het aantal gebruikers op je site.

Een server kan het niet aan als het volgens de server overschreden wordt. Ik heb het zelf eens meegemaakt; via een cronjob 20 queries elke seconde uitvoeren en 15 gebruikers online aan het klikken. 50% van de tijd kreeg ik een melding met To Many Connections, de andere 50% niet. Zodoende kwam ik tot de conclusie dat het ligt aan wanneer je klikt.

Het maakt niet uit of je het volgende doet:

function_1.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$CountIfExist
= mysqli_query($con,"SELECT id FROM users WHERE id = '1'");
?>


function_2.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$CountUsers
= mysqli_query($con,"SELECT id FROM users");
?>


functions.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
include 'function_1.php';
include 'function_2.php';
?>


Of dat je doet:
functions.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$CountIfExist
= mysqli_query($con,"SELECT id FROM users WHERE id = '1'");
$CountUsers = mysqli_query($con,"SELECT id FROM users");
?>


Dat maakt geen enkel verschil. Wat wel een verschil maakt is dit:

function_2.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$CountUsers
= mysqli_query($con,"SELECT id FROM users");
?>


Of:
function_2.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$CountUsers
= mysqli_query($con,"SELECT * FROM users");
?>


In voorbeeld 1 haalt de Query enkel het ID op, in voorbeeld 2 haalt de Query alles op.
 
Ozzie PHP

Ozzie PHP

13/10/2014 15:39:29
Quote Anchor link
>> Ik schat tussen de 10 en de 30, nogal globaal genomen.

Oké, thanks :)
 
Willem vp

Willem vp

13/10/2014 15:43:39
Quote Anchor link
Peter Flos op 13/10/2014 14:42:48:
Als 100 mensen 100 query's op eenzelfde seconde proberen te verkrijgen is de kans groot dat je SQL Server down gaat.

Ik denk dat je MySQL onderschat. ;-)

Een van onze servers heeft de afgelopen 7,5 maand gemiddeld (!) meer dan 400 queries per seconde verwerkt. En ik praat dan niet eens over een erg zware server; hij is 6 jaar oud en qua performance en geheugen vergelijkbaar met mijn laptop. En eigenlijk is die database niet eens de hoofdtaak van die server, maar meer iets wat 'ie erbij doet.
 
Peter  Flos

Peter Flos

13/10/2014 15:46:04
Quote Anchor link
Ik kan je zeggen dat mijn server (waar ik dan ook bijna niets voor betaalde, de huidige server is daar gelukkig wel geschikt voor) bij de 50 queries per seconde al vast liep. Gelukkig is dat nu bij mij niet meer zo.

(ik had het toen getest door de Cron, maar laat ik nu niet de webwinkel uit de lucht gaan halen ;))
 
Wout boer

wout boer

13/10/2014 15:55:29
Quote Anchor link
Ozzie PHP op 13/10/2014 15:31:22:
Wat bedoel je met 1 script en 10 scripts? Wat versta jij onder een script?

Je moet proberen met zo min mogelijk queries zoveel mogelijk van de gewenste data binnen te halen.


Ik vraag me gewoon af of als je, zegt, 1000 requests tegelijk krijgt op 1 php script of het php script dat aankan (of dat het beter is om te verdelen over een aantal php scripts).

oftewel hoeveel requests kan 1 php script tegelijk aan?
als 1000 mensen tegelijk via 1 php script een query doen is dat een probleem?
moet ik dat dan opdelen in meerdere php scripts waar dat kan?

het is vast een enorme noob vraag, maar het is wel belangrijk.

vervolg vraag:
hoe het bij mij nu zit:
app -> php script -> sql database -> php script (echo informatie) -> app

maar levert dit geen problemen op, waarbij bij de ene persoon de informatie terug krijgt van iemand anders zijn php request/echo.
Gewijzigd op 13/10/2014 16:24:29 door wout boer
 
Willem vp

Willem vp

13/10/2014 16:39:36
Quote Anchor link
Wout boer op 13/10/2014 15:55:29:
Ik vraag me gewoon af of als je, zegt, 1000 requests tegelijk krijgt op 1 php script of het php script dat aankan (of dat het beter is om te verdelen over een aantal php scripts).

Zo werkt niet niet. Een request komt binnen op je webserver. Die start vervolgens een proces/child/worker waarin hij voor die betreffende request het PHP-script uitvoert.

Als er dus 100 requests tegelijk voor hetzelfde script binnenkomen, zullen er 100 processen draaien die elk afzonderlijk het script uitvoeren. Je hoeft er dus in principe geen rekening mee te houden dat je script "het aankan".

Althans... er zijn wel kleine dingetjes waar je rekening mee moet houden. Als je script tijdelijk iets in een tussenbestandje schrijft moet je dat niet /tmp/tmpfile noemen, want dan zitten die 100 scripts elkaar wel in de weg. Dat valt echter eenvoudig op te lossen door in dit soort gevallen altijd een unieke naam te gebruiken. PHP heeft daar zelfs de functies tmpfile() en tempnam() voor.
 
Henk de Vriep

Henk de Vriep

13/10/2014 16:51:06
Quote Anchor link
Ik begrijp niet waarom er mensen hier praten over een aantal query's op een pagina. Dat is echt totaal irrelevant. Belangrijk is dat je geen overbodige info ophaalt. Als je geen overbodige informatie ophaalt dan kunnen zelf 35000 query's op een pagina nog "goed" zijn.

Zelf werk ik voor een webshop die heel veel query's gebruikt uiteraard. Het meeste is op te lossen met caching. Productpagina's kunnen zo goed als compleet gecached worden. Net als overzichtspagina's. Elke keer als een gebruiker een pagina ophaalt wordt er gekeken of de cache ouder is als 24 uur. Is dit niet het geval dan wordt de gecachde inhoud geserveerd door de server. Is dit wel het geval dat worden er een serie query's gedaan en wordt het resultaat opgeslagen in de cache. Hierdoor wordt de database zo min mogelijk belast.

Zoals ik eerder aangaf is het ook belangrijk welke query's je uitvoert. Als ik bijvoorbeeld de volgende query uitvoer:

SELECT * FROM `orders`

Dan kan dat makkelijk enkele tientallen minuten duren omdat die database ongelovelijk veel regels bevat.

SELECT `id` FROM `orders`

Deze query is vele malen sneller.

Belangrijk is en blijft dat je alleen informatie ophaalt die je gaat gebruiken. Veel beginners maken snel fouten met SELECT * FROM omdat ze dan alle informatie ophalen uit een regel terwijl dit vaak niet nodig is.

Mijn laatste puntje is: hergebuik

Als je data meerdere keren op een pagina nodig hebt en je wilt geen gebruik maken van cache sla deze info dan bijvoorbeeld op in een array zodat je de query niet opnieuw hoeft te doen.
 
Willem vp

Willem vp

13/10/2014 17:33:14
Quote Anchor link
Jr Melgert op 13/10/2014 16:51:06:
Ik begrijp niet waarom er mensen hier praten over een aantal query's op een pagina. Dat is echt totaal irrelevant.

Niet mee eens. Elke query die je uitvoert geeft een bepaalde overhead, zoals het compileren en optimaliseren van je query. Jij doet het voorkomen alsof je alle wereldproblemen kan oplossen door een wildcard te vervangen door een paar veldnamen, maar dat is slechts een deel van het geheel. Als je een slecht gekozen index op een tabel hebt, is dat vaak veel bepalender voor de performance van je database. En zo kan ik nog wel een stuk of twintig dingen opnoemen waar je rekening mee zou moeten houden.

Wel is het zo dat een select * een van de eenvoudigste dingen is om op te optimaliseren. Het maakt bovendien je code inzichtelijker als je expliciet aangeeft welke velden je ophaalt. Maar die extreme snelheidswinsten die jij noemt, haal je alleen maar als je erg grote rijen hebt waar je maar relatief weinig velden van gebruikt.
 
Peter  Flos

Peter Flos

13/10/2014 17:56:30
Quote Anchor link
Willem, wat dacht je ervan om een tutorial te schrijven met die 20 dingen waar je rekening mee kan houden? Ik ben eerlijk gezegd wel geinteresseerd erin, omdat ik er ook mee te maken ga krijgen.
 
Ozzie PHP

Ozzie PHP

13/10/2014 18:08:48
Quote Anchor link
>> Willem, wat dacht je ervan om een tutorial te schrijven met die 20 dingen waar je rekening mee kan houden?

Goed plan Peter. Wanneer begin je eraan? Ik ben er ook wel benieuwd naar.
 
Ward van der Put
Moderator

Ward van der Put

13/10/2014 18:33:18
Quote Anchor link
Hmm, kennelijk leest Willem zijn vakliteratuur ;-)

Goed zo.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.