Online leden weergeven
Beste mensen,
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]
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;
?>
Dus ik login -> klik na 2 minuten weg en dat sta ik nog ingelogd.
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.
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?
Nee, gewoon bij elke view?
Een cronjob weet niet wie er op mijn site is.
Een cronjob weet niet wie er op mijn site is.
Gewijzigd op 31/01/2011 09:57:16 door - Ariën -
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.
hmmm... oke
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?
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 INSERT of een UPDATE ksot echt geen drol aan load.
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
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 -
1 miljoen aanroepen gaat niet lukken. Ik gok dat Apache bij 10000 er al mee kapt, alhoewel, niet apache, maar MySQL ( en ik gok dat je dat gebruikt ).
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.
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.
Bij iedere bezoek pas je de gebruikersattribuut online aan met een NOW(). Dan selecteer je de die gebruikersattribuut, bij leden van wie de datum en tijd, in een periode van bijvoorbeeld 5 minuten ligt.
Simpel, maar je moet wel een genormaliseerde database hebben :-)
Simpel, maar je moet wel een genormaliseerde database hebben :-)
@Chris: wat bedoel je met gebruikersattribuut?
@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?
@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?
Geen idee, maar die draaien niet op 1 server. Ik denk ook niet dat ze een mysql database draaien. Misschien een Oracle db of misschien postgres? Al betwijfel ik dat laatste, omdat de read van pg 10x zo traag is als bijv. mysql.
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.
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 gebruiker,
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.
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).
Vanuit Tweakers weet ik dat ze met meerdere databases werken:
MySQL, PostgreSQL en MongoDB
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?




