Avatar billede psychodad Nybegynder
19. september 2004 - 15:32 Der er 3 kommentarer og
1 løsning

rand() tidskompleksitet

Jeg er lidt i tvivl om hvor tung srand()+rand() er at udregne i PHP.

Jeg har en tabel i MySQL (ikke på localhost, men på LAN), hvor jeg gerne skal slette felter løbende efter 20 minutter (onlineliste). Jeg har tænkt mig at lave en delete query når brugerne går ind under onlinelisten på sitet og så delete alle felter der er over 20 minutter gamle inden onlinelisten vises.

Det vil dog være spild af queries at delete hver eneste gang en bruger går ind på onlinelisten. Derfor har jeg tænkt mig at lave en rand() så det statistisk set kun bliver for hver 10. visning at der køres en delete eller lignende.

Spørgsmålet er så om srand()+rand(0,10)+if-sætning er bemærkelsesværdigt mindre tidskrævende end 1 stk DELETE query (der opererer på primary key) på MySQL over LAN.

Umiddelbart vil jeg mene en srand()+rand() operation er meget hurtigere end at skulle ud over netværket osv, right ?
Avatar billede dennismp Nybegynder
19. september 2004 - 15:35 #1
brugt mt_rand() Den er bedre :-) (og du behøver ikke at kalde srand() mere).

Rand-løsninger er megethurtigere end sql'en. Der har en en masse overhead mht netværk, mysql skal i svin, læse sql'en, forstå sql'en, finde resultatet og sende svar retur.

mt_rand() er blot en matematisk rutine som CPU'en klarer i et snuptag.
Avatar billede dennismp Nybegynder
19. september 2004 - 15:38 #2
med andre ord, du har ret :)
Avatar billede psychodad Nybegynder
19. september 2004 - 15:43 #3
ok bare skriv et svar.

grunden til jeg tog srand() med var pga følgende kommentar til rand på php.nets docs side (1. kommentar):

>>Note: As of PHP 4.2.0, there is no need to seed the random number generator with srand() or mt_srand() as this is now done automatically.<<

Do realize that you don't HAVE to call srand, but if you don't you get the same results every time... Took me quite a while to get to that conclusion, since I couldn't figure it out:

http://www.php.net/rand

Men ok jeg har ikke selv lige taget mig sammen til at teste det :-)
Avatar billede dennismp Nybegynder
19. september 2004 - 15:50 #4
Det er kun et problem, hvis du bruger PHP4.2 eller ældre. Men det skader absolut ikke at bruge srand() :-) (så kan de kode jo også virke på PHP4.2 og ældre - hvis det skulle blive aktuelt)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester