Was ist der beste Weg, um die Seite Ansicht Zähler wie die, die sie haben hier auf der Website, wo jede Frage hat eine "Views" Zähler?
Berücksichtigung von Leistungs- und Skalierbarkeitsfragen.
Was ist der beste Weg, um die Seite Ansicht Zähler wie die, die sie haben hier auf der Website, wo jede Frage hat eine "Views" Zähler?
Berücksichtigung von Leistungs- und Skalierbarkeitsfragen.
Ich habe zwei Beobachtungen auf dem Stackoverflow-Ansichtenzähler gemacht:
Es gibt eine link
Element in der Kopfzeile, das die Aktualisierung der Zählung auslöst. Für diese Frage sieht das Markup wie folgt aus:
<link href="http://stackoverflow.com/questions/246919/increment-view-count" type="text/css" rel="stylesheet" />
Ich könnte mir vorstellen, dass man die URL anklicken kann, um den Viewcount zu aktualisieren, ohne die Seite tatsächlich anzusehen, aber ich habe es nicht ausprobiert.
Ich hatte eine Benutzerstimmen-Ticket Die Antwort von Jeff wies darauf hin, dass die Ansichten nicht zweimal hintereinander von derselben IP aus erhöht werden.
Der von mir optimierte Zähler funktioniert folgendermaßen:
UPDATE page_views SET counter = counter + 1 WHERE page_id = x
if (affected_rows == 0 ) {
INSERT INTO page_views (page_id, counter) VALUES (x, 1)
}
Auf diese Weise führen Sie 2 Abfragen für die erste Ansicht aus, für die anderen Ansichten ist nur 1 Abfrage erforderlich.
Anstatt jedes Mal, wenn die Datenbank aufgerufen wird, einen Datenbankaufruf zu machen, würde ich einen Zähler mit einem Cache-Objekt inkrementieren und je nachdem, wie viele Besuche Sie jeden Tag auf Ihrer Website erhalten, die Seitenzugriffe bei jedem 100sten Zugriff auf die Website an die Datenbank senden. Das ist viel schneller, als die Datenbank bei jedem einzelnen Zugriff zu aktualisieren.
Eine andere Lösung ist die Analyse der IIS-Protokolldatei und die Aktualisierung der Treffer alle 30 Minuten durch einen Windows-Dienst. Dies ist, was ich implementiert habe und es funktioniert Wunder.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.