Frage

Ich erstelle eine Website mit benutzergenerierten Inhalten.Auf der Startseite möchte ich eine Liste aller erstellten Elemente anzeigen und diese nach einem Aufrufzähler sortieren können.Das klingt einfach, aber ich möchte mehrere Zähler.Ich möchte wissen, welches Element am letzten Tag, in der letzten Woche, in den letzten Monaten oder insgesamt am häufigsten besucht wurde.

Meine erste Idee war, 4 Zählerspalten in der DB-Tabelle des Artikels zu erstellen.Jeweils eine für täglich, wöchentlich, monatlich und insgesamt, und es wird ein Cronjob erstellt, der den Tageszähler alle 24 Stunden, den Wochenzähler alle 7 Tage usw. löscht.

Aber mein Problem dabei ist: Was passiert, wenn ich wissen möchte, welcher Artikel der Woche am häufigsten angesehen wurde, kurz nachdem der Wochenzähler gelöscht wurde?

Was ich brauche, ist eine effiziente Möglichkeit, einen kontinuierlichen Zähler zu erstellen, der bei jedem zu alten Seitenaufruf reduziert und bei jedem neuen Seitenaufruf erhöht wird.

Im Moment denke ich über eine Lösung mit dem nach Redis-Server, aber ich habe noch keine Lösung.

Ich suche hier nur nach einer allgemeinen Idee, aber zu Ihrer Information: Ich entwickle diese Anwendung in Ruby on Rails.

War es hilfreich?

Lösung

Was würde ich auf Tracking-Treffer auf jeder Seite vorschlagen, nur mit einem Zeitstempel und jeder Benutzer-ID oder was auch immer können Sie speichern, dann können Sie die Zähler berechnen, wie Sie mögen und es später ändern, weil Sie die Daten in einem einfachen haben verwenden Format. Eine Tabelle mit Entität (Seite) Benutzer-ID und Zeitstempel sollte gut sein. Fügen Sie einfach zu, dass, wann immer die gewünschte Seite.

Um die Anzahl der Einsätze reduzieren Sie Batch können sie zusammen in Ihrer Software. eine mehrreihige Einsatz Constructing wie hier für MySQL Aufwand sparen. Sie müssen nur Ihre Klassen müssen den Einsatz konstruieren, wie beschrieben und speichern, bis der Einsatz. Eine Idee ist es, nicht nur Zeit, sondern repariert eine Anzahl von Zeilen zu Charge so dass Sie höchstens sagen, wenn der Server geht tut man nur verlieren x Anzahl der Zeilen von Treffern.

Es ist ein MySQL-Trigger, dass Sie nur ausführen können dazu führen, nachdem die volle Charge von Einsätzen durchgeführt wird, die Sie Berichtstabellen zu aktualisieren, verwenden könnten, so dass Sie nicht haben zu treffen ständig die Haupttreffer Tracking-Tabelle.

Auch wenn dies muss wirklich hoch seinen Durchsatz in die eigenen Scherbe abgebrochen werden kann und den Zugriff über Ajax ruft das Hit-Tracking zu tun, und die Zählungen erhalten.

Andere Tipps

Was Sie tun können, ist zu speichern, was besucht wird und zu welchem ​​Datum (Zeitstempel) und Sie würden dies für jedes einzelne Mal tun, wenn etwas besucht wird.Wenn Sie abrufen möchten, was besucht wurde, wählen Sie diejenigen innerhalb eines bestimmten Datumsbereichs (Zeitstempel) aus und addieren sie.

ODER

Jeder Ihrer Links hat für jeden Tag, an dem er besucht wird, eine eigene Zeile.Wenn sie mehr als einmal an einem Tag besucht werden, wird der bereits vorhandene Wert um +1 erhöht.

Sie könnten das zweite Beispiel verwenden und eine wöchentliche Speicherung anstelle einer täglichen Speicherung durchführen, wenn Ihre Wochen etwa Sonntag-Samstag sind und nicht 7 Tage vor dem heutigen Tag.Ersetzen Sie also die Wörter „Tag“ durch das Wort „Woche“, wodurch weniger Datenspeicher zur Verfügung steht.

Ich sehe, dass Sie große Datenspeicher vermeiden möchten, aber in dem Maße, in dem dies funktionieren soll, sehe ich nicht viel Besseres. Sie könnten das zweite Beispiel verwenden und eine wöchentliche Speicherung anstelle einer täglichen Speicherung durchführen, wenn Ihre Wochen etwa Sonntag sind -Samstag und nicht 7 Tage vor heute.

Hier ist eine Möglichkeit für den Regis-Server, nachdem Sie sich einige Dokumentationen angesehen haben.

SET link_id|date => "visit_count"

Dies speichert die link_id oder wie auch immer Sie es zusammen mit dem nennen date getrennt durch | oder welches Zeichen auch immer Sie verwenden möchten.In diesem Schlüsselwert speichern Sie die visit_count.

Angenommen, Sie möchten an diesem Datum einen Treffer zu diesem Link hinzufügen.Du würdest GET link_id|date und addiere dann +1 zum visit_count Es kehrt zurück und speichert es dann wieder, wie ich es oben gezeigt habe.

Wenn Sie die Anzahl der Zugriffe für ein bestimmtes Datum erhalten möchten, können Sie dies mit dem tun GET link_id|date wieder.

Zum Ersetzen würden Sie einfach Ruby-on-Rails verwenden link_id, date Und visit_count mit den entsprechenden Werten.

Ich hoffe, das hilft dir weiter.

Was könnten Sie tun, ist eine Tabelle namens ViewCounters erstellen.

Es wäre eine ‚pageId‘ Spalte, eine ‚Tag‘ Spalte, und eine ‚Ansichten‘ Spalte. Die pageId auf der Seite entsprechen würde angesehen wurde und der ‚Tag‘ an den Tag entsprechen würde es auf gesehen wurde.

Jedes Mal, wenn eine Seite betrachtet wird, findet es (oder erstellt, wenn es noch nicht gehört) die Zeile in der Tabelle ViewCounters mit seiner pageId und mit dem aktuellen Tag. Es würde dann erhöhen Sie die Spalte ‚Ansichten‘ für diese Zeile.

Das gibt Ihnen ein Höchstmaß an Flexibilität in Bezug auf die neuen Zähler zu schaffen und Geschichte zugreifen. Die Weitere Ansicht zählt für Monats-, Wochen- und Tageszähler sind alle sehr billig zu erzeugen.

Ein weiterer großer Vorteil wäre, dass es nur pro Seite pro Tag Zeile ist, was nicht so schlimm ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top