Online leden weergeven
ik wil graag op mijn website ...
het aantal online leden weergeven, iemand een idee hoe dit moet?
Mvg,
Robbert-Jan
Link verwijderd i.v.m virus
[/modedit]
Gewijzigd op 22/08/2011 10:44:46 door Niels K
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$select = 'SELECT id FROM user_table WHERE online = 1 ';
$query = mysql_query($select);
$rows = mysql_num_rows($query);
Echo 'online leden:'.$rows;
?>
$select = 'SELECT id FROM user_table WHERE online = 1 ';
$query = mysql_query($select);
$rows = mysql_num_rows($query);
Echo 'online leden:'.$rows;
?>
Je kan beter iets maken. dat het na bepaalde tijd (bijvoorbeeld: 1 minuut) de 1 (in het script van Jordi) verloopt als je geen actie meer hebt ondernomen.
Inderdaad, en ik sla dat in een aparte tabel op voor zowel de ingelogde bezoeker als de gast. Als timeout gebruik ik iets van drie a vijf minuten....
Hoe werk je die tabel dan bij Aar? Met een cron job ofzo?
Uhmm.. bedoel je dat je bij iedere view / pagina aanroep een complete tabel doorloopt en dan de users met een langere tijd dan x minuten uit die tabel gooit?
Ja... niks mis mee.
Klopt, niks mis mee. PHP voert al deze zaken over het algemeen server-side uit. Load times zijn bijzonder laag.
Een INSERT of een UPDATE is echt een druppel van een hele plas qua load gezien.
Ik dacht altijd dat een database bewerking best "heftig" was en dat het niet ten goede komt aan de performance. En dat je daarom dus ook het aantal database bewerkingen moet proberen te minimaliseren. Maar ik merk dat veel mensen op het forum er heel luchtig mee om gaan.
Maar wat nu als je een heeel druk forum hebt met wat zullen we eens zeggen, 3 miljoen leden? En die zijn allemaal tegelijk online. Dan kan het dus best gebeuren dat je 1 miljoen database aanroepen per seconde hebt. En als ie dan iedere keer die tabel moet doorlopen dan zou ik denken dat dat niet echt prettig is voor de server, en ook niet voor de database tabel (kans op beschadigingen????). Of maak ik me nu echt druk om niks?
Een SELECT zou erg CPU-intensief kunnen zijn als er een ingewikkelde query gebruikt wordt, maar zolang je de INDEXES goed hebt staan is geen groot gevaar voor traagheid.
Uiteraard moet je ook een goed genormaliseerde database hebben, dat is ook een belangrijke factor. Maar goed, anders kan je ook geen goede INDEXES plaatsen :-P
Gewijzigd op 31/01/2011 10:21:13 door - Ariën -
Mysql heeft nou niet bepaald een goede ondersteuning voor persistent connection pooling. Als jij 1*10^6 leden hebt die elke seconde refreshen, dan heb je wel andere zaken om je druk om te maken.
Overigens, wat ik over het algemeen doe, ik hou een aparte tabel bij voor alle login acties, hier worden ook auth key`s en dergelijke opgeslagen en dus ook de status. Als je hier door heen lust, lus je over het algemeen door een vrij kleine tabel waar alleen de gelogde mensen staan.
Simpel, maar je moet wel een genormaliseerde database hebben :-)
@Merijn: als het boven de 10.000 fout gaat, hoe doen de zware jongens dit dan? Denk aan Fok, nu.nl?
Of tonen zij gewoon het aantal online leden niet?
Maar terugkomende op je vraag: 10k aanvragen per seconde is echt ongelooflijk veel. Als je nagaat dat sites als tweakers.net etc op 2,5k zitten, hoef je je daar nog niet druk om te maken.
Tabel gebruikersattributen
Zodat je niet vooraf hoeft aan te geven in de database welke attributen (email, naam, leeftijd dat soort dingen) je wilt gebruiken. Door een genormaliseerde database kun je op die manier vrijwel onbeperkt dingen aanmaken en hoef je daar geen databasewijzigingen voor aanbrengen.
Fok draait naar mijn weten op MySQL, en dan hebben ze zelfs een heel server voor MySQL klaar staan die wel wat load aan kan.
@Merijn: Ook de groten gebruiken gewoon MySQL en inderdaad op dedicated MySQL servers. Oracle is mucho te kostbaar voor ook voor de groten. Mega kostenpost als je dat efficient wil draaien (dus geen Oracle Express ofzo).
MySQL, PostgreSQL en MongoDB
@Chris: kun je een voorbeeldje geven welke velden jij dan in tabel gebruiker hebt staan en welke velden in tabel gebruikersattributen?