Hallo,
folgende Situation:
Ich habe eine Tabelle namens "users", in der die User einer Community gespeichert sind. Die Zahl der Zeilen (User) liegt im Moment bei 8000 mit stark steigender Tendenz.
Um eine "Wer ist online"-Liste zu erstellen, gibt es in der Tabelle die Spalte "lastvisit", die alle 20 Sekunden durch ein Script aktualisiert wird, das in ein IFrame geladen wird. Dieses schaut nebenbei noch nach neuen PNs für den User.
Das Problem liegt darin, dass die SQL-Abfrage zum Updaten dieser Zelle
sowie zum Auslesen der Online User
oft recht lang dauern. Indizes sind auf userid (unique), username und lastvisit gesetzt.
Wie könnte man nun den ganzen Vorgang beschleunigen?
Meine erste Idee ist eine zweite Tabelle, die nur die Spalten userid und lastvisit enthält, evtl. als HEAP. So muss nicht immer mit der kompletten Usertabelle gearbeitet werden, die eine recht große Datenmenge enthält. Das Problem ist, dass ich beim Anzeigen der Onlineliste trotzdem Daten wie Username, Geschlecht, Geburtstag etc. brauche und diese dann aus der Usertabelle holen muss, sei es per PHP oder per Joins.
Um dies zu umgehen könnte man in die "Lastvisit-Tabelle" ja noch die Spalten Username, Geschlecht usw. mit aufnehmen. Das Problem dabei ist, dass man ja dann redundante Daten hat und es würde wieder etwas Geschwindigkeit kosten.
Welche Methode ist eurer Meinung nach die performanteste? Oder hat jemand vielleicht einen komplett anderen Denkansatz parat?
Vielen Dank im Voraus,
Thomas
folgende Situation:
Ich habe eine Tabelle namens "users", in der die User einer Community gespeichert sind. Die Zahl der Zeilen (User) liegt im Moment bei 8000 mit stark steigender Tendenz.
Um eine "Wer ist online"-Liste zu erstellen, gibt es in der Tabelle die Spalte "lastvisit", die alle 20 Sekunden durch ein Script aktualisiert wird, das in ein IFrame geladen wird. Dieses schaut nebenbei noch nach neuen PNs für den User.
Das Problem liegt darin, dass die SQL-Abfrage zum Updaten dieser Zelle
Code:
update users set lastvisit = 1234567890 where userid = 1234 limit 1
Code:
select Ein, paar, Spalten from users where lastvisit >= 1234567860 order by username asc
Wie könnte man nun den ganzen Vorgang beschleunigen?
Meine erste Idee ist eine zweite Tabelle, die nur die Spalten userid und lastvisit enthält, evtl. als HEAP. So muss nicht immer mit der kompletten Usertabelle gearbeitet werden, die eine recht große Datenmenge enthält. Das Problem ist, dass ich beim Anzeigen der Onlineliste trotzdem Daten wie Username, Geschlecht, Geburtstag etc. brauche und diese dann aus der Usertabelle holen muss, sei es per PHP oder per Joins.
Um dies zu umgehen könnte man in die "Lastvisit-Tabelle" ja noch die Spalten Username, Geschlecht usw. mit aufnehmen. Das Problem dabei ist, dass man ja dann redundante Daten hat und es würde wieder etwas Geschwindigkeit kosten.
Welche Methode ist eurer Meinung nach die performanteste? Oder hat jemand vielleicht einen komplett anderen Denkansatz parat?
Vielen Dank im Voraus,
Thomas
Kommentar