login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Users online met Cronjob

Offline Babak - 22/04/2009 19:05
Avatar van BabakMySQL interesse Hallo beste mensen,

Ik heb nu een users online script.. maar als je dus die pagina opvraagt gaat hij door alle users heen om te kijken of ze online zijn. Stel dat ik 30,000 gebruikers heb moet die dus elke keer 30,000 kijken en dat vergt nogal wat van m'n website. Nu is mijn vraag dus:

Hoe kan ik dit het beste met een cronjob doen? (btw: users online is aanwezig in de laatste minuut).

10 antwoorden

Gesponsorde links
Offline qubus - 22/04/2009 19:19
Avatar van qubus Lid Op het moment dat een user inlogt, het user id, en een timestamp wegschrijven in een aparte tabel. Timestamp elke keer dat de user iets doet vernieuwen. Dan hoef je alleen de gebruikers in de tabel door te lopen om te kijken of ze meer dan (bijv,) 5 minuten niets gedaan hebben. Indien dat zo is gooi je ze weer uit de tabel.
Het aantal regels is dan dus het aantal users online.

Hopelijk duidelijk genoeg?
Offline Babak - 22/04/2009 20:20
Avatar van Babak MySQL interesse Jahoor, ik snap het. Dankuwel.

Is dat handiger/effectiever/sneller dan wat ik eerst deed?

En is dit de snelste/handigste manier? Hoe zou jij het hebben gedaan?

Offline Joost - 22/04/2009 20:28 (laatste wijziging 22/04/2009 20:28)
Avatar van Joost PHP expert Ik heb even een testje gedaan, als jij een veld hebt met 'last_click' en dan een unix timestamp (ik vermoed dat dat je situatie is?) en met 25.000 leden in de database:
  1. SELECT user_id
  2. FROM users
  3. WHERE last_click > ( UNIX_TIMESTAMP( ) -300 )

Duurde 0.0005 seconde.
Wanneer je dat dus goed indexeert is het niet zo zwaar voor je server..
Offline Babak - 22/04/2009 20:38
Avatar van Babak MySQL interesse Wat bedoel je precies met indexeren? Sorry, maar snap dat nog niet.

Wat ik had is wel wat jij daar hebt, maar dan gewoon time()-300

Dan moet hij toch 25,000 rijen langs.. en ik hoorde van iemand dat dat de server te zwaar belast.
Offline Joost - 22/04/2009 20:42 (laatste wijziging 22/04/2009 20:47)
Avatar van Joost PHP expert Een index toevoegen op die kolom...
Als je niet weet wat het is, moet je even kijken of hier op sima een tutorial staat, anders google.

De snelheid van je mysql wordt drastisch versneld door indexen (mits goed gebruikt) 
Offline jaronneke - 23/04/2009 09:43
Avatar van jaronneke MySQL interesse gewoon geen select * gebruiken maar gewoon zoals Medieval hierboven zei .. dan blijft je query geoptimaliseerd
Offline Babak - 23/04/2009 13:45
Avatar van Babak MySQL interesse Dan moet hij bij 30,000 users toch nog steeds 30,000 rijen langs? Dat duurt dan toch ook lang...
Offline Joost - 23/04/2009 15:48
Avatar van Joost PHP expert Nee, dat moet hij alleen als je het niet indexeert...
Offline Babak - 23/04/2009 16:20
Avatar van Babak MySQL interesse Ik heb nu dit:

  1. $users= mysql_query("SELECT username FROM members WHERE online_time > $onlinetijd ORDER BY level DESC");


Zo gaat het dus sneller?
Offline Joost - 23/04/2009 16:25
Avatar van Joost PHP expert
Medieval schreef:
Een index toevoegen op die kolom...
Als je niet weet wat het is, moet je even kijken of hier op sima een tutorial staat, anders google.

http://lmgtfy.com/?q=mysql+index
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.353s