Beste Methode zum Speichern von Ansichten / Statistiken in MySQL

8

Ich arbeite keine Seite, die einzelne Seitenansichten in einer 'views' Tabelle speichert:

%Vor%

Es ist ziemlich einfach, speichert Benutzer-ID (die Benutzer-ID auf der Website), ihre IP-Adresse, die URL (ohne die Domäne, um die Größe der Tabelle ein wenig zu reduzieren), die Verweis-URL (nicht wirklich das jetzt zu verwenden und könnte es loswerden), das Datum (natürlich JJJJ-MM-TT-Format) und der Unix-Zeitstempel, wann die Ansicht auftrat.

Die Tabelle wird natürlich ziemlich groß (4 Millionen Zeilen im Moment und es ist eine ziemlich junge Seite) und Abfragen darauf sind langsam.

Für einige grundlegende Optimierungen habe ich jetzt eine 'views_archive' Tabelle erstellt:

%Vor%

Dies ignoriert die Benutzerinformationen (und die Verweis-URL) und speichert, wie oft eine URL pro Tag angesehen wurde. Dies ist wahrscheinlich, wie wir im Allgemeinen die Daten verwenden möchten (wie oft eine Seite pro Tag betrachtet wurde), also sollte die Abfrage ziemlich schnell sein, aber selbst wenn ich sie benutze, um hauptsächlich die 'views' Tabelle zu ersetzen (rechts) Jetzt stelle ich mir vor, dass ich die Seitenaufrufe pro Stunde für die letzte Woche / Monat anzeigen könnte und dann Tagesansichten darüber hinaus anzeigen würde und somit nur die "Sichten" -Tabelle Daten aus der letzten Woche / Monat enthalten müsste, aber sie ist immer noch groß Tabelle.

Kurz gesagt, ich frage mich, ob Sie mir Tipps geben können, wie Sie die Speicherung von Statistiken / Seitenaufrufen in einer MySQL-Site am besten handhaben, wobei das Ziel darin besteht, sowohl die Größe der Tabelle (s ) in der db so klein wie möglich und trotzdem in der Lage zu sein, die Informationen leicht (und zumindest relativ schnell) abzufragen. Ich habe partitionierte Tabellen ein wenig untersucht, aber auf der Site ist MySQL 5.1 nicht installiert. Alle anderen Tipps oder Gedanken, die Sie anbieten könnten, würden sehr geschätzt.

    
Charlie 15.11.2010, 18:05
quelle

3 Antworten

1

Wahrscheinlich möchten Sie eine Tabelle nur für Seiten haben und die Benutzeransichten haben einen Verweis auf diese Tabelle. Eine andere mögliche Optimierung wäre, die Benutzer-IP in einer anderen Tabelle gespeichert zu haben, vielleicht einige Sitzungstabelleninformationen. Das sollte Ihre Abfragezeiten etwas reduzieren. Sie sind mit der Archivtabelle auf dem richtigen Weg; die gleichen Optimierungen sollten das ebenfalls unterstützen.

    
Paul Sonier 15.11.2010, 18:23
quelle
1

Archivspeichermodul von MySQL

Ссылка

Es ist großartig für Protokolle, es ist schnell zu schreiben, der Nachteil ist das Lesen ist ein bisschen langsamer. aber es ist großartig für Log-Tabellen.

    
Sean Thayne 15.11.2010 18:15
quelle
0

Wenn Ihre Anwendung ein Blog ist und Sie die Übersicht über Ihre Blogposts behalten möchten, haben Sie wahrscheinlich eine Tabelle mit dem Namen blog_posts . In dieser Tabelle schlage ich vor, dass Sie eine Spalte namens "views" erstellen und in dieser Spalte einen statischen Wert für die Anzahl der Ansichten dieses Posts speichern. Sie werden weiterhin die Tabelle views verwenden, die jedoch nur dazu verwendet wird, alle Ansichten zu verfolgen (und zu überprüfen, ob sie "eindeutig" sind oder nicht).

Wenn ein Benutzer einen Blogposteintrag besucht, überprüft er im Allgemeinen die Tabelle views , um festzustellen, ob sie hinzugefügt werden sollte. Wenn dies der Fall ist, erhöht es auch das Feld "views" in der entsprechenden Zeile für den Blogpost in blog_posts . Auf diese Weise können Sie für jeden Beitrag einfach auf das Feld "Ansichten" zugreifen, um einen kurzen Blick darauf zu werfen, wie viele Ansichten es hat. Sie können dies noch einen Schritt weiterführen und Redudancy hinzufügen, indem Sie einen CRON-Job einrichten, um alle Ansichten neu zu zählen und zu überprüfen und jede blog_posts -Zeile am Ende des Tages entsprechend zu aktualisieren. Oder wenn Sie möchten, können Sie auch bei jedem Update eine erneute Zählung durchführen, wenn die sekundengenaue Genauigkeit Schlüssel ist.

Diese Lösung funktioniert gut, wenn Ihre Website leseintensiv ist und Sie ständig zählen müssen, wie viele Ansichten jeder Blogpost hat (vorausgesetzt, dass es sich um Ihre Anwendung handelt: -))

    
axsuul 15.11.2010 20:57
quelle

Tags und Links