Nehmen Sie zum Beispiel mein Profil oder eine beliebige Anzahl von Ansichten auf dieser Website. Wie ist der Prozess der Protokollierung? Anzahl der Besuche pro Seite oder Objekt auf einer Website, von der ich denke, dass sie Folgendes beinhaltet:
Die Frage ist: Was ist der Prozess und die beste Vorgehensweise, um Benutzeranfragen zu zählen?
BEARBEITEN
Ich habe die Computersprachen zur Liste der Tags hinzugefügt, da sie für mich von Interesse sind. Fühlen Sie sich frei, alle Bibliotheken, Module und / oder Erweiterungen einzuschließen, die die Aufgabe erfüllen.
Die Frage könnte umformuliert werden in:
Die "richtige" Antwort hängt von der Situation ab; hauptsächlich die am meisten gewünschte Statistik und die Verfügbarkeit von Ressourcen, um sie zu sammeln und zu verarbeiten: zB:
Alle Webserver haben die Möglichkeit, Anfragen zu protokollieren. Das Problem mit ihnen ist, dass es eine Menge Verarbeitung erfordert, um aussagekräftige Daten zu erhalten, und in Ihrem Beispielszenario werden keine anwendungsspezifischen Details aufgezeichnet. etwa, ob die Anfrage einem registrierten Benutzer zugeordnet wurde oder nicht.
Diese Option funktioniert nicht für das, was Sie interessiert.
Der Anwendungsprogrammierer kann benutzerdefinierten Code auf die Anwendung anwenden, um die Daten, die Sie am meisten interessieren, in einer Protokolldatei aufzuzeichnen. Dies ist vergleichbar mit dem Webserver-Protokoll; außer dass es Anwendung bewusst sein kann und Dinge wie das Mitglied, das die Anfrage stellt, aufzeichnet.
Die Programmierer müssen möglicherweise auch Skripte erstellen, die aus diesen Protokollen diejenigen extrahieren, die Sie am meisten interessieren. Diese Option eignet sich möglicherweise für eine Website mit hohem Datenaufkommen mit viel Speicherplatz und Systemadministratoren, die wissen, wie sichergestellt wird, dass die Protokolle von den Produktionsservern gedreht und beschnitten werden, bevor schlimme Dinge passieren.
Der Anwendungsprogrammierer kann benutzerdefinierten Code für die Anwendung schreiben, die jede Anforderung in einer Datenbank aufzeichnet. Dies macht es relativ einfach, Berichte auszuführen und die Daten sofort zugänglich zu machen. Diese Lösung verursacht zum Zeitpunkt jeder Anforderung einen höheren System-Overhead und ist daher besser für Standorte mit weniger Verkehr oder Szenarien geeignet, in denen die Daten sehr geschätzt werden.
Dies ist eine Überlegung zu den oben genannten Optionen. Google Analytics macht das.
Jede Seite enthält JavaScript-Code, der den Client anweist, dem Webserver zu berichten, dass die Seite angesehen wurde. Die Daten können in einer Datenbank gespeichert oder in eine Datei geschrieben werden.
Hat den großen Vorteil, die Genauigkeit in Szenarien zu verbessern, in denen Impressionen aufgrund von starkem Caching / Proxy zwischen Client und Server verloren gehen.
Jedes Mal, wenn eine Anfrage von jemandem eingeht, der kein Cookie ausstellt, gehen Sie davon aus, dass es sich um ein neues handelt, und notieren diesen Treffer als "anonym" und geben nach der Anmeldung ein eindeutig identifizierendes Cookie zurück. Es hängt von Ihrer Anwendung ab, wie genau dies beweist. Einige Anwendungen eignen sich nicht zum Caching, so dass es ziemlich genau ist; andere (hohe Besucherzahlen) regen das Caching an, was die Genauigkeit verringert. Offensichtlich ist es nicht sehr nützlich, bis sie sich erneut authentifizieren, wenn sie den Browser / Standort wechseln.
Dann ist die Frage, welche Statistiken für Sie wichtig sind. Zum Beispiel, in einigen Situationen möchten Sie wissen:
Daher möchten Sie es normalerweise in Zeiträume aufteilen, um Trends zu sehen. Beziehungsweise:
Also zurück zu Ihrer Frage: Best Practice für "Anzahl der Aufdrucke, wenn ein Nutzer auf eine Seite geht"?
Es hängt von Ihrer Anwendung ab.
Ich schätze, Sie sind am besten mit einer datenbankgestützten Anwendung, die aufzeichnet, was für Ihre Anwendung am interessantesten ist, und verwendet Cookies, um die Sitzungen des Mitglieds zu verfolgen.
Die empfohlene Vorgehensweise für einen Zugriffszähler hängt davon ab, wie viel Traffic von Ihrer Website erwartet wird. Wie von wybiral vorgeschlagen, können Sie etwas implementieren, das nach jeder Anfrage in eine Datenbank schreibt. Dies kann die IP-Adresse einschließen, wenn Sie eindeutige Besucher zählen möchten, oder es könnte einfach sein, wenn Sie einfach eine laufende Summe für jede Seite oder für jedes Paar (Seite, Benutzer) erhöhen.
Aber das erfordert eine Datenbank schreiben für jede Anfrage, auch wenn Sie nur eine statische Seite liefern wollen. Idealerweise sollte eine skalierbare Web-App so viel wie möglich aus einem In-Memory-Cache dienen. Datenbank- oder Festplatten-E / A sollten so weit wie möglich vermieden werden.
Das ideale Setup wäre also, eine Repräsentation der Aktivität des Servers im Speicher aufzubauen und dann gelegentlich (etwa alle 15 Minuten) diese Ereignisse in die Datenbank zu schreiben. Sie könnten möglicherweise Tausende von Anfragen in die Warteschlange stellen und sie dann mit einer einzelnen Datenbank schreiben.
Es gibt ein Tutorial, das beschreibt, wie man genau das in Python mit Sellerie und Karotten macht: Ссылка . Es enthält auch einige Beispiele dafür, wie Sie Ihre Datenbanktabellen mit Django-Modellen einrichten und welchen Code Sie aufrufen müssen, wenn jemand auf eine Seite zugreift.
Dieses Tutorial wird Ihnen sicherlich behilflich sein, unabhängig davon, was Sie implementieren möchten, obwohl dieses Architekturniveau möglicherweise übertrieben ist, wenn Sie nicht jede Stunde tausende von Treffern erwarten.
Verwenden Sie eine Datenbank, um die eindeutigen IPs zu protokollieren (wenn die IP nicht in der DB vorhanden ist, erstellen Sie sie, fahren Sie ansonsten wie geplant fort) und fragen Sie dann die Datenbank nach der Anzahl dieser Entitäten ab. Indexieren Sie dies mit IP und URL, um Ansichten für einzelne Seiten zu speichern. Sie müssen sich nicht darum kümmern, registrierte Benutzer auf diese Weise zu verfolgen, sie werden in die eindeutige IP-Anzahl zusammengefasst. Was mehrere Personen von einer IP betrifft, gibt es nicht viel, was man tun kann, wenn man ein Konto benötigt und die Seitenansichten von Benutzer- & gt; - & gt; ähnlich zählt.
Ich würde vorschlagen, einen persistenten Schlüssel / Wertspeicher wie Redis zu verwenden. Wenn Sie eine Liste mit dem Listenschlüssel als serialisierten Bezeichner verwenden, können Sie andere serialisierte Einträge speichern und llen verwenden, um die Listengröße zu finden.
Beispiel (python) nach der Initialisierung Ihres Redis-Shops:
%Vor%Mit dieser Technik können Sie alles als serializedKey oder serializedValue verwenden. Wenn Sie IPs mit dem heutigen Datum oder serialisierten Login-Informationen speichern möchten, sind beide genauso einfach. Außerdem werden nur eindeutige serialisierte Werte gespeichert, da Schreibvorgänge beim Lesen gesperrt sind (zumindest soweit ich mich erinnere).
Ich werde versuchen, Pixel-Tracking zu implementieren, um Ansichten auf Ihrer Seite / Ihrem Objekt zu verfolgen. Diese Methode wird von Google (Google Analytics) und anderen führenden Medienunternehmen verwendet.
Die Pixelverfolgung ist in Ordnung, da Sie das Trackingpixel auf einen für diesen Zweck spezifischen HttpHandler ausrichten können. Auf diese Weise können Sie die Last trennen und sogar eine Art von Warteschlange für Hochlast-Szenarien verwenden.
Sie können auch benutzerspezifische Informationen in das Tracking-Pixel einbeziehen, z. B. wenn WHO die Seite besucht hat.
zB:
%Vor%Dann müssen Sie die Anfrage mit einem bestimmten HttpHandler / php redirect / controller (egal welche Sprache Sie benutzen) bearbeiten und die infos bearbeiten.
Grüße