2012-03-29 13 views
0

Für stackoverflow.com gibt es eine Statistik für wie viele Ansichten für eine Frage.Wie kann ich die Anzahl der Aufrufe eines Posts wie stackoverflow view Zähler erhalten?

Wie wird es verfolgt? Registrierte und nicht registrierte Benutzer können beliebige Fragen anzeigen.

Was ist das Datenbankrelationsschema für diese Zählung?

Sollte ich nur den Spaltenwert für eine bestimmte Frage in der Datenbanktabelle erhöhen?

Oder sollte ich einen neuen Datensatz/Zeile hinzufügen, wenn ein Benutzer diese Frage anzeigt, um dann die Anzahl Echo das Ergebnis der Summe (thatcolumn) dieser Tabelle anzuzeigen?

+0

Bitte, wir können Ihnen nicht sagen, stackoverflow Struktur. das ist geheim =). Genauer gesagt, Ihre Fragen sind zu allgemein – safarov

+0

Den Überblick über die Seite behalten. – shibly

Antwort

0

Es gibt zahlreiche Ansätze dazu. Da sind die beiden, die du erwähnt hast, aber es gibt andere, die je nach deiner Situation besser zu dir passen.

Wenn Sie viele Zugriffe auf Ihre Site haben, wie stackoverflow, erhöht das Erhöhen des Zählers auf einer Datenbanktabelle, wenn eine Person die Frage ansieht, ziemlich teuer (abhängig davon, wie ihre Datenbank eingerichtet ist, bin ich mir nicht sicher).

ein anderer Ansatz, den ich vorher verwende, ist die Ansichten in einer Cache-Engine wie memcache/xcache/eaccelerator zu speichern (jeder hat seine eigenen Vorzüge) und einen Cron, der stündlich/nächtlich/etc. Dadurch werden die Ansichten aufgeräumt und in eine Datenbanktabelle eingefügt, auf die die eindeutige ID im Fall von SO.com verweist, und die Zähler im Cache zurückgesetzt.

Wenn Sie absolute Zuverlässigkeit wünschen, wäre eine NoSQL-Engine wie mongoDB hervorragend für schnelle und effiziente Schlüsselwertdatenspeicherung.

+0

Warum ist es teuer, den Wert dieser Zeile mit dieser Seite/Frage/diesem Post zu erhöhen? Welche Methode ist besser zwischen den beiden genannten Methoden? Erhöht die Cache-Engine die Anzahl? Was ist der Mechanismus der Cache-Engine? – shibly

+0

nicht sagen, es ist teuer (kann teuer sein), aber ohne zu wissen, Ihr System kann es sein. Wie gut könnte Ihr System 10.000 Aktualisierungen pro Sekunde verarbeiten? Siehst du, woher ich komme? Die Cache-Engine erhöht die Zählung nicht, Sie lesen den Cache, erhöhen ihn um 1 und speichern ihn dann im Cache, damit die nächste Person mit einer Ansicht erhöht wird. Ich kann nicht sagen, welche der beiden besser ist, da wir Ihr System nicht kennen. Das Erhöhen der Spalte ist kein schlechter Ansatz, wenn Sie nur sagen, sagen wir 500-1000 Aufrufe pro Stunde. – ncremins

+0

Was ist mit der zweiten Möglichkeit? Fügen Sie für jede Ansicht einen neuen Datensatz/eine neue Zeile hinzu, und zeigen Sie dann für diese Tabelle den Zählwert do sum (thiscolumn) oder count (*) an. – shibly

0

Wenn Sie nur an der Frage interessiert sind, wie oft eine Frage angezeigt wird, würde ich einen Zähler zum spezifischen Fragedatensatz hinzufügen. Ein Eintrag in einer anderen Tabelle für jede Frageansicht könnte ziemlich schnell außer Kontrolle geraten.

Wenn Sie diese Datensätze zusammenfassen, um die Anzahl der Aufrufe zu ermitteln, kann dies auch zu Leistungsproblemen auf einem ausgelasteten System führen.

Um weiter zu erklären, schlage ich vor, dass Sie eine Integer-Spalte zu Ihrer Fragetabelle hinzufügen. Jedes Mal, wenn eine Frage angezeigt wird, erhöhen Sie einfach den Zähler. Halte es einfach. Halte es schnell.

+0

Können Sie mehr erklären? Ich konnte deine Antwort nicht verstehen. Sollte ich die Zeile für jede Ansicht erhöhen? – shibly

Verwandte Themen