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 :)
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.
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 ;))
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.
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.
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.
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.
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.