• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

2 performance lastige Probleme lösen

Status
Für weitere Antworten geschlossen.

Sn0opy

Neues Mitglied
Sorry, aber das Topic konnte ich einfachn icht besser gestalten.

Es geht um folgendes. Ich arbeite seit 2 Wochen wieder an meinem Forum. Nun steh ich vor 2 Problemen.

1. Ich habe Boards in mein Forum eingebaut. Somit werden Threads nicht nur auf einer Seite angezeigt, sondern können somit auch noch kategorisiert werden.

In diesen Boards steht bereits ein Ausrufezeichen neben dem Thread, wenn dieser neue Posts enthällt. Das war soweit kein Problem. Jeder Thread hat in der Tabelle ein Feld, wo die UserIDs drin stehen, die sich den Thread bereits angeschaut haben. Steht man nicht drin, ist der Thread ungelesen.

Nun möchte ich aber, ohne groß Performance aufzuwenden, dass auch neben den Boards angezeigt wird, ob es ungelesene Threads gibt.

Die Sache ist: Grundlegend isses kein Problem. Aber man muss sich mal ein Forum vorstellen, welches Rund 500k Threads, 25k User und ~80k Threads beinhaltet. Wäre bischen aufwendig auf der Startseite ALLE Threads durchzugehen und abzufragen, ob die eigene UserID bereits im Feld drin steht oder nicht.



2. Problem

Das selbe Performance-Problem hab ich nun bei einer Funktion, um alle Threads als gelesen zu markieren. Ich denke ich muss nichts weiteres dazu sagen. Ich muss in diesem Fall wieder alle Threads durchgehen um dies zu überprüfen.


Nun ist die Frage. Hab ich hier ein paar Denkfehler, oder wie würdet ihr es regeln?
 
Werbung:
darum macht man eine tabelle mit 2 spalten und speichert da die userID von dem der gelesen hat und die vom thread...
es gilt immer das man möglichst wenig spalten haben soll die masse der daten ist nachher eher unwichtig, dann kannst du nocch z.b. einen timestamp dazu speichern, 3 spalten sind auch ok ^^, und threads die älter als z.b. 3 mon sind automatisch als gelesen markieren... wird wohl keinen stören ;) ^^

das mit den "alle als gelesen markieren" da musst du dann alle threads suchen die hächstens 3 mon alt sind und deren id nicht mit der des users in der "gelesen" tabelle ist... dann noch alle ids hinzufügen und gut ^^

aufgaben wie alle als gelesen markieren und so amchst du mit nem cronjob am besten irgendwann abends so gegen 4 oder halb 5 da sind die wenigsten user online

so ich hoffe ich habe alle deine probleme gelöst ;) :)
 
Indirekt. Natürlich kann man es auf diese Weise machen. Aber nun bedenk ma. Ich guck mir ja immer wieder Dinge von anderen Foren ab und die bekommen es ja auch irgendwie hin, ohne eine extra Tabelle.

Außerdem sinds auf dauer doch relativ viele Einträge.

Es müsste also irgendwie eine andere Variante des Ganzen geben, auf die ich dann auch eher zurückgreifen möchte.
 
Werbung:
ich kann mir wirklich nicht virstellen, dass eine spalte pro thread performanter währe...

wenn dann allerhöchstens eine extra tabelle in der pro user die threads gespeichert werden mit ex/implode...

nebenbei ich habe erfahrung mit vielen usern ^^
 
Ok, ich hab mir deine Idee nochmal ans Herz gelegt. Ich werde über PHP regeln, dass alle Threads älter als 5 Monate automatisch gelesen sind. Der Rest wird über eine eigene Tabelle gemacht.

Demnach kann ich ja nun abfragen welcher User einen Thread gereits gelesen hat. Bleibt doch aber immernoch die Abfrage, ob der Thread in Board X ist, um vor Board X irgendetwas darzustellen, dass dieses Board ungelesene Threads enthällt.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben