Thread Zugriffe effektiv loggen und verarbeiten
(3 answers)
Opened by roooot at 2011-07-18 23:25
Hallo Leute,
ich will Zugriffe auf bestimmte Dinge speichern, beispielsweise wenn sich ein User ein Album anschaut. Möglichst mit genauer Uhrzeit. Hierbei interessiert erstmal nur die Anzahl der Views des Albums über alle User. Diese Statistiken sollen anhand von Zeitintervallen gefiltert werden (letzten XX Minuten, letzten XX Tage oder zwischen Tag.Monat.Jahr und Tag2.Monat2.Jahr2). Diese Filter sollten variabel sein und nicht von festen Zeiten ausgehen (beispielsweise wenn man die letzten 60 Minuten anschaut, als Zeiteinheit Minuten verwenden, bei Tagen als Zeiteinheit Tage) - ein möglicher Filter sollte auch sein: Die letzten 90 Tage mit Zeiteinheit 3 Stunden. Die Zeiteinheit sollte frei wählbar sein -- egal wie logisch es erscheint sich die Statistiken von einem Jahr in Minuten anzeigen zu lassen. Ich denke Minuten als kleinste granulare Einheit sollte reichen, sekundenbasiert ist unnötig. Wie komme ich an die Daten? Ich könnte jetzt jeden Zugriff speichern, allerdings verfälscht das meine Statistiken, wenn ein User ein und dasselbe Album 10 mal hintereinander speichert. Sprich hier muss schonmal eine Sperre mit Userid her. Weiter will ich die Daten möglichst effektiv speichern, sprich nicht jeden Zugriff plain. Die Verarbeitung der Daten kann in Echtzeit oder mittels cronjob erfolgen (letzteres würde mir eher zusagen, allein schon aus performcegründen, wenn viel los ist und viele Klicks generiert werden). Ich suche also auch nach einer geeigneten Datenstruktur um die Daten zu speichern und möglichst performant auszulesen. Da potentiell jeder User sich die Statistiken in einem Graph anzeigen lassen kann, sollten die vorbereiteten Daten irgendwo gecached werden und nicht jedesmal neu erstellt werden (RAM oder Filesystem oder Datenbank ist hierbei egal, ich dachte an Storable auf Filesystem -- deswegen auch per cronjob erstellen lassen). Statistische Spielerein wie Varianz berechnen, Trend usw wären optional, die Daten sollten allerdings so gespeichert werden, dass sie es erlauben. Ich habe es früher so gemacht, dass nur die letzte Stunde minutenweise gespeichert wird, danach bis 24 Stunden stundenweise und danach Tageweise. Das erlaubt mir allerdings nur starre Filter wie: Zeige die letzte Stunde an usw. Das möchte ich nun besser machen. Ich danke euch für Ideen und Anregungen wie ich das mit Perl realisieren kann. Ich brauche keinen Code, nur eine Idee für das Datenmodell. Die Umsetzung bekomme ich dann schon hin ;) Last edited: 2011-07-18 23:27:09 +0200 (CEST) Viele Grüße :)
|