[PHP] Query of grote session array?

Pagina: 1
Acties:

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025
Ik ga binnenkort ff een site bouwen waarvoor ik zeg maar random dingen uit een DB wil plukken.

Kan ik beter op elke pagina een query doen die alle ids ophaalt en vervolgens daaruit eentje random selecteert en daar dan de verdere gegevens van ophaalt, of kan ik beter via een sessie al die ids opslaan en telkens weer daaruit ophalen?

Rustacean


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:34
Wat denk je zelf ?

Verwijderd

Je kan natuurlijk ook iedere keer een query doen als:
code:
1
SELECT blaat FROM blaat WHERE blaat ORDER BY RAND() LIMIT 1

en de twee dingen die jij voorsteld zijn natuurlijk *ahum*ongeveer exact gelijk :z

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:34
Takkie:
en de twee dingen die jij voorsteld zijn natuurlijk exact gelijk :z
Nee natuurlijk niet |:(
Het gaat toch om performance. :z

Verwijderd

Ik wilde al gaan zeggen: ongeveer exact gelijk ;)
je haalt bij allebei random iets uit een lijst alleen bij de ene methode haal je meer uit de database en is dat dus soort van sneller, maar ja, of je het merkt?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ddc:
Nee natuurlijk niet |:(
Het gaat toch om performance. :z
Goed, waar zou jij voor kiezen, en waarom? En dan wel met performance argumenten komen, hm? ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • grolle
  • Registratie: Oktober 2001
  • Laatst online: 08-07 18:53
Op dinsdag 07 mei 2002 18:09 schreef Takkie het volgende:
code:
1
SELECT blaat FROM blaat WHERE blaat ORDER BY RAND() LIMIT 1
Blaat
blaaat
Blaaat, blaat, blaaaaat ... :D LOL

Ehhh.. Dit is wel de makkelijkste en meest database ontlastende methode

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:34
drm:
Goed, waar zou jij voor kiezen, en waarom? En dan wel met performance argumenten komen, hm? ;)
Session, omdat je dan niet steeds een databaseconnectie hoeft te leggen :).
Bovendien is session-informatie veel makkelijker aanspreekbaar (minder code) en sneller.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025
Op dinsdag 07 mei 2002 18:15 schreef ddc het volgende:
Session, omdat je dan niet steeds een databaseconnectie hoeft te leggen :).
Bovendien is session-informatie veel makkelijker aanspreekbaar (minder code) en sneller.
Dat dacht ik dus zelf ook. Maar als ik 10.000 array elementen heb, wordt het boxje dan niet een beetje braque?

Rustacean


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ddc:
Session, omdat je dan niet steeds een databaseconnectie hoeft te leggen :).
zit wat in * drm
Bovendien is session-informatie veel makkelijker aanspreekbaar (minder code) en sneller.
kan er dan werkelijk helemaal niemand goeie wrappers schrijven?? ;)

Ik zou toch gewoon voor de database gaan. Een aantal argumenten:
• Je gegevens zijn altijd up to date. zo niet, had je even moeten refreshen.
• De bottleneck gaat 'm zitten in de query waarbij je "de verdere" gegevens uit de db gaat halen, niet de eerste met de random. (is een query van niks, in feite)
* drm Die databaseconnectie maak je hoogstwaarschijnlijk toch wel voor andere dingen binnen de pagina.
• De eerste pagina, waar de rand's gedaan worden, is het zwaarst (daar doe je 1 query om alles op te halen, wat als je db groter wordt verloop van tijd?) terwijl die het minste informatie biedt (hoogstwaarschijnlijk).

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025
Elke pagina is even groot, database connectie wordt toch wel gemaakt.

Rustacean


Verwijderd

Op dinsdag 07 mei 2002 18:15 schreef ddc het volgende:

[..]

Session, omdat je dan niet steeds een databaseconnectie hoeft te leggen :).
Bovendien is session-informatie veel makkelijker aanspreekbaar (minder code) en sneller.
Jij leest niet, er wordt alleen een id uit de session gehaald, de rest komt iedere keer weer uit de database, dus dit is geen goed argument :P

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:34
Met het argument dat er sowiezo een DB-connectie wordt gelegd krijgt de DB al een beetje meer voorkeur :).

Eigenlijk is het dan al voordeliger een DB te nemen, omdat dan via de SQL syntax ook al directe resultaten kan worden gegeven.

Voordeel bij geen DB verbinding is natuurlijk dat je:
code:
1
array_rand(unserialize($_SESSION['arraywaarden']));

kunt doen :).
Even afgezien van de seed ;)

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025
Njah, bijkomend puntje... Als eenmaal een id is geweest, moet die daarna eigenlijk niet meer voorkomen... Daartoe zou ik dus sowieso een array in de sessie moeten gooien die bijhoudt welke rijen al zijn geweest.

Rustacean


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:34
Takkie:
Jij leest niet, er wordt alleen een id uit de session gehaald, de rest komt iedere keer weer uit de database, dus dit is geen goed argument :P
Wel gelezen, maar dat is natuurlijk het stomste wat je kunt doen. Eerst gegevens uit de DB halen en dan de rest uit andere bronnen |:(

* Dennis moet denken aan het leuke SQL voorbeeldje :P
code:
1
2
3
4
5
6
$bla = mysql_query("SELECT id, name FROM tabel");
while($row = mysql_fetch_array($bla))
{
  if($row[0] > 4)
    echo $row[1];
}

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

* drm moest denken aan het leuke SQL voorbeeldje
Zo toch:
code:
1
2
3
4
5
$bla = mysql_query("SELECT * FROM tabel");
while($row = mysql_fetch_array($bla))
{
   if (is_array ($row)) $count = $count + 1;
}

:? :+

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 08:34
drm:
:? :+
Nee, kijk eens goed.
Niet in je SQL een WHERE statement geven maar daarna in de loop een IF doen :+ (in mijn voorbeeld)

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025
Op dinsdag 07 mei 2002 18:30 schreef drm het volgende:
code:
1
2
3
4
5
$bla = mysql_query("SELECT * FROM tabel");
while($row = mysql_fetch_array($bla))
{
   if (is_array ($row)) $count = $count + 1;
}
Die lijkt me logischer als een voorbeeld van stomheid, jah, maar misschien zie ik iets over het hoofd? :D

Rustacean


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025
Op dinsdag 07 mei 2002 18:32 schreef ddc het volgende:
Nee, kijk eens goed.
Niet in je SQL een WHERE statement geven maar daarna in de loop een IF doen :+ (in mijn voorbeeld)
Hmmm, oeps. :D

Rustacean


Verwijderd

Op dinsdag 07 mei 2002 18:26 schreef ddc het volgende:

[..]

Wel gelezen, maar dat is natuurlijk het stomste wat je kunt doen. Eerst gegevens uit de DB halen en dan de rest uit andere bronnen |:(

/me moet denken aan het leuke SQL voorbeeldje :P
code:
1
2
3
4
5
6
$bla = mysql_query("SELECT id, name FROM tabel");
while($row = mysql_fetch_array($bla))
{
  if($row[0] > 4)
    echo $row[1];
}
hehe, daar kan ik het natuurlijk alleen maar mee eens zijn :D

Verwijderd

Dat is ongeveer hetzelfde waar ik mij zorgen over maak. Ik ben bezig met een site met multiple choise vragen die de bezoeker kan oplossen.

Nu vraag ik mij af wat het efficientste is.

Ineens alle vragen ophalen uit de database en stokeren in sessie variabelen om later uit te lezen.
OF
De vragen 1 voor 1 ophalen per keer de bezoeker een nieuwe vraag begint.

Zoals hier boven aangehaald is het eerste niet zo best voor als er veel veranderingen in de database zijn.

Het tweede is dan weer nadeel voor de Sql server. Veel simultane queries maar met weining load. Of schat ik dat verkeerd in?

Uw votes graag,
Geert

Verwijderd

Ik ben er persoonlijk altijd voor om de data per pagina met queries die geen onnodige load veroorzaken uit de database te halen. Je database server is er als het goed is op gebouwd om veel simultane requests aan te kunnen dus dat kan het probleem bijna niet zijn, en voor mijn gevoel werkt het zo prettiger en minder omslagtig.
Pagina: 1