useronline > 10.000

Hektik hat gesagt.:
So:

PHP:
<?php
$y = count(mysql_query("SELECT * FROM user WHERE eingeloggt='ok'"));

echo $y;

?>

Äusserst unperformante Lösung. Ich würd das so machen:
PHP:
$res= mysql_query("SELECT COUNT(*) FROM tabelle WHERE eingeloggt = '1'");
$anzahl = mysql_fetch_row($res);
$anzahl = $anzahl[0];
//oder so ähnlich ;)
 
Zuletzt bearbeitet:
PHP:
$y = count(mysql_query("SELECT * FROM user WHERE eingeloggt='ok'"));
Das würde aber nicht gehen, weil dier Rückgabewert von mysql_query() eine ressourcen-Kennung und kein Array ist:

phpmanual hat gesagt.:
Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. [...] Das alleine sagt jedoch überhaupt nichts über die Anzahl veränderter oder gelieferter Datensätze aus. Es ist durchaus möglich, dass eine Anfrage erfolgreich war, ohne einen einzigen Datensatz zur verändern oder zu liefern.
 
birnkammer hat gesagt.:
Das würde aber nicht gehen, weil dier Rückgabewert von mysql_query() eine ressourcen-Kennung und kein Array ist:

Da hast du Recht! :) War ich ein wenig zu voreilig ;)

Aber so:
PHP:
$y = mysql_num_rows(mysql_query("SELECT * FROM user WHERE eingeloggt='ok'"));

echo $y;
 
Hektik hat gesagt.:
Da hast du Recht! :) War ich ein wenig zu voreilig ;)

Aber so:
PHP:
$y = mysql_num_rows(mysql_query("SELECT * FROM user WHERE eingeloggt='ok'"));

echo $y;
Nein genau so nicht.
Denn dann kriegst du mit 10.000 Benutzern wirklich ein Problem.
Was du tust ist alle Einträge abzufragen, als Resource in PHP zu holen und dann PHP zählen lassen wieviele es sind.
Euin Grundsatz den man immer im Hinterkopf haben sollte, ist, dass man alles was geht in Mysql berechnen lassen sollte. Einfacher Grund: Der Mysql Server kann das viel schneller.

Also SELECT COUNT(*) FROM table WHERE cond.

Kannst ja gerne mal einen Vergleich machen was schneller ist.
Und wenn du schonmal verbessert wurdest, poste doch bitte nicht das Gleiche nochmal.
 
Bei einer wie von dir angegebenen Benutzerdichte von 10000 Benutzern gleichzeitig (wobei gleichzeitig ein sehr dehnbarer Begriff sein muss) solltest du wirklich mehr Wert auf die Effizienz und Performance deiner Skripte legen.
So einen wie den von Rythms verbesserten Fehler solltest du auf gar keinen Fall machen, denn sonst geht dein Server schnell in die Knie. Auch das Eintragen eher „unwichtiger“ Daten solltest du möglicherweise mithilfe des INSERT DELAYED INTO- beziehungsweise des UPDATE LOW_PRIORITY-Statements vornehmen, damit es nicht zum Engpässen kommt.
 
Verzichte auf eine DB, mach ne ASCII-Posting Geschichte mit File-Locking auf eine Datei in einer kleinen Ramdisk, entweder in PHP oder in C am besten wäre C dann rufst Du das Ding von PHP aus auf via exec.

Bei 10.000 User und einer AVG Size der Webseite von 50 kb musste aber schnelle Platten haben. Nehmen wir an Dein Zeitfenster wäre eine Minute, dann hättest Du pro Minute 10.000 User, das wären pro Sekunde 10.000/60 = 166 Sessions/Sek = 8.3 MB/Sek HD-Last das entspricht so ca. bei realistisch gesehen kleinen Platten eine Auslastung von 35 - 50 % wobei der Performance-Einbruch dann sicher auftritt wenn der Schreib/Lesekopf sich oft bewegen muss was in dem Fall sicherlich auftreten wird unter MySQL. Server-Load schätze ich je nach Fall so auf 7-9 und Ram brauchste ja dann auch schon n bissl was denn man bekommt bei MySQL oft einen too many connections error Fehler.

Also Faktum, kleines C Progrämmchen schreiben von PHP aus IP und was Du so brauchst als Param übergeben und gut is, so nach dem Motto.
 
@bk75

danke. So in etwa dachte ich mir das auch. ich denke anders wird es auch nicht gehen, leider ;( dann werde ich mich mal bissel schlau machen in dem gebiet !

@alle anderen

auch danke an euch für die hilfe das problem zu lösen!! aber bei ca 10.000 usern gleichzeitig ist mysql hier nicht mehr das richtige

@10.000 user
... das ist realtiv "einfach" die zu bekommen. wir haben die nicht alle auf einer seite sondern auf mehreren. wir wollen so etwas ähnliches wie ein chart system entwickeln.

Danke nochmal an alle !

Gruß Sebastian
 
Zurück