# Benutzer Statistiken



## Rallenaldo (17. Nov 2015)

Hallo.

Ich entwickle derzeit eine WebApplication, in der sich User anmelden und eigene Profilseiten erstellen können. Ich würde gerne die Zugriffsstatistiken auf diese Profilseiten "speichern" und den Benutzern in deren Kontrollzentrum zur Verfügung stellen. Damit der Benutzer z.B. sieht, wie oft seine Profilseite aufgerufen wurde, wie lange die Leute auf seiner Seite waren etc.

Ich bin mir allerdings nicht ganz sicher ob ich bei der Google Suche auf die richtigen Tools gestoßen bin. Meist werden nur die Server-Log Files durchsucht. Eines dieser Tools ist z.B. AWStats. Teilweise scheint mir auch Google Analytics das richtige zu sein. 

Ich bin wie gesagt allerdings nicht sicher, ob diese Tools nicht eher für den Administrator der Seite, in diesem Fall mich, sind. Hat jemand schon Erfahrungen gemacht und kann mir ein geeignetes Framework nennen?


----------



## Thallius (17. Nov 2015)

Verstehe ich nicht. Wozu braucht man da ein Framework. Jedesmal wenn eine Profilseite eines Users aufgerufen wird, erhöhst du einen Counter in einer Spalte "Calls" in der User-Tabelle oder wie auch immer.


----------



## Rallenaldo (17. Nov 2015)

Hi.

Das ist ja eigentlich genau das, was ich herausfinden will. Ich kann natürlich für sämtliche Statistiken eigene Methoden schreiben und jeweils einen Counter erstellen. Aber ich dachte, dass so etwas evtl schon vorgefertigt gibt. Bei den Zugriffszeiten, wie lange war eine Person auf der Seite, wann war sie auf der Seite etc. , stelle ich mir das schon etwas komplexer vor.


----------



## Joose (17. Nov 2015)

Rallenaldo hat gesagt.:


> Aber ich dachte, dass so etwas evtl schon vorgefertigt gibt.



Nach welchen Daten? Jeder hat gerne etwas unterschiedliche Daten zum Anzeigen.
Zum Auswerten kann es sicher ein Framework geben, die Daten aber zu speichern musst du schon selber erledigen.



Rallenaldo hat gesagt.:


> Bei den Zugriffszeiten, wie lange war eine Person auf der Seite, wann war sie auf der Seite etc. , stelle ich mir das schon etwas komplexer vor.



Wie lange eine Person auf meiner Seite war finde ich nicht aussagekräftig.
Ich kann eine Seite öffnen mir einen Kaffee holen und einen Film anschauen, danach wechsle ich die Seite ... war ich nun tatsächlich solange auf der Seite? 
Zugriffszeiten und Zugriffszahl sind da schon besser.


----------



## Rallenaldo (17. Nov 2015)

Ok. Vielen Dank für die Hilfe.

Ich muss die Daten ja logischerweise in eine Datenbank speichern. Ist es aus Performance-Gründen dann sinnvoll, alle paar Sekunden eine Datenbankverbindung aufzubauen oder sollten die Daten besser in ein LogFile geschrieben werden und dann nachts in die Datenbank eingetragen werden?


----------



## Joose (18. Nov 2015)

Man muss sie nicht in einer DB speichern, kannst es auch in Files speichern.
Kommt halt darauf an wie du sie auswerten willst und ob du sie dann gerne als File oder DB hättest.

Wenn du in der Application auf die Profilseite von User XYZ wechselt, dann hast du ja eine DB Verbindung um die Profildaten zu laden.
Entweder verwendest du die gleiche um einen entsprechenden Zugriff zu speichern oder es gibt ein eigene DB Verbindung nur für Zugriffe etc. (ob diese dauerhaft offen ist und du synchron in die DB schreibst oder es asynchron passiert ist dann deine Sache.
Beides hat Vor- und Nachteile


----------



## Rallenaldo (21. Jan 2016)

Hi. 

Ich habe meine Statistiken jetzt weitestgehend erstellt und diese werden auch korrekt in eine Datenbank eingetragen. Wenn ich die Statistiken aber nach z.B. einem Monat archivieren will und diese für den Benutzer weiterhin aufrufbar sein sollen, wie lege ich da dann am besten die Datenbankstruktur an?

Aktuelle habe ich einen Benutzer(Entity), der ein Statistik-Objekt(Entity) besitzt. 

In dieses Objekt werden aktuell alle Statistiken eingetragen. Um alles etwas übersichtlich zu halten, würde ich gerne monatlich die Statistiken archivieren. Mir ist aber nicht ganz klar, wie ich das in einer Datenbank abbilden soll.

Sollte/Muss ich dann ein Entity StatistikArchiv(identisch zu Statistik nur + Spalte Jahr & Spalte Monat) erstellen und in meinem StatistikObjekt eine List<StatistikArchiv>() erstellen oder ist das eher nicht sinnvoll?


----------



## Joose (21. Jan 2016)

Ich würde deine Datenbanktabelle einfach um eine Spalte Datum erweitern. Dann kannst du pro Tag einen Datensatz anlegen, extra archivieren würde ich sie nicht unbedingt. Es reicht wenn du dem Benutzer einfach nur die Statistiken der letzten 30 Tage anzeigst. Über einen speziellen Menüpunkt kann er sich halt auch ältere Einträge anschauen -> Archiv.

Künstlich die Daten mehrere Tabellen aufteilen ist nicht sinnvoll.


----------



## Rallenaldo (23. Jan 2016)

Hi. 

Das würde dann aber auch bedeuten, dass ich pro Benutzer pro Tag eine Zeile habe. D.h. 365 Zeilen pro Jahr. Wenn ich 100 Benutzer habe, werden das pro Jahr 36.500 Zeilen.

Nach mehreren Jahren wird das doch n bisschen viel oder? Wenn ich dann eine Query erstelle, durchsucht er doch alle Zeilen?


----------



## Thallius (23. Jan 2016)

Ja, so nach 1000 Jahren könnte die DB dann etwas langsam werden....

SCNR

Claus


----------

