2009-06-01 7 views
1

Was ist eine gute Metrik für die Suche nach dem aktivsten Forum-Thread oder Spiel in Ihrer Datenbank?Die meisten aktiven Themen oder Spiele finden

Stellen Sie sich vor, Sie führen ein Forum wie 4chan. Sie möchten, dass die aktivsten Threads auf der ersten Seite angezeigt werden. Sie haben versucht, Themen nach last_updated zu sortieren, aber das Ergebnis ist chaotisch: Die Threads, die Sie bei jeder Aktualisierung sehen, sind praktisch zufällig, und wenn Sie auf die zweite Seite springen, werden Ihnen möglicherweise viele der gleichen Ergebnisse angezeigt. Es muss einen stabileren Algorithmus geben, um aktive Threads zu bestimmen!

Stellen Sie sich vor, Sie betreiben eine Website, auf der Menschen spielen und Spiele schauen können. Sie möchten, dass die Leute sehen, wie aufregend diese Spiele sein können, wenn sie Ihre Titelseite besuchen. Interaktion in Ihrem Spiel kann auf einzelne Ereignisse reduziert werden. Aber man kann nicht einfach nach last_updated sortieren, weil manche Leute sehr langsam spielen und man Spiele finden möchte, die aufregend sind.

Denken Sie bei Bonuspunkten darüber nach, wie Sie eine SQL-Abfrage für maximale Aktivität erstellen oder wie Sie dies in einem serverseitigen Cache implementieren könnten. Für die besten Antworten ist kein Cron-Job erforderlich, um die Daten zu präsentieren.

Antwort

0

Natürlich können Sie nicht auf last_updated (it self) zählen, Sie sollten reply_count/play_count, view_count/played_count für alle aktiven Threads verwenden. und Sie müssen möglicherweise ein Feld wie now_playing_count für jedes Spiel hinzufügen, um das heißeste Spiel jetzt zu bestimmen.

0

Ein Problem, das etwas mit Ihnen zu tun hat, heißt "The Britney Spears Problem". Es handelt sich um die Schwierigkeit, heiße Themen algorithmisch zu bestimmen. Aus Sicht der KI ist dies ein schwieriges Problem, da es zunächst keine festgelegte Anzahl von Themen gibt, so dass eine Klassifizierung nicht in Frage kommt. Und da sich Trends von Zeit zu Zeit ändern, muss das Modell Zeit in Anspruch nehmen (das typische neuronale Netzwerk tut dies nicht, es sei denn, Sie sprechen über das neuronale Netzwerk Time Delay). Schließlich ist das, was heiß ist und nicht subjektiv ist und sich von Person zu Person unterscheidet, was bedeutet, dass Sie die vergangenen Interessen der Person berücksichtigen müssen (Collaborative Filtering).

+0

Ich bin nur für ein Maß für die Aktivität suchen: das heißt, viele der jüngsten Ereignisse. –

1

Im Forum-Beispiel basieren die hotest-Threads auf geposteten Kommentaren und Sie zählen einfach die Anzahl der im aktuellen Tag/Woche/Monat geposteten Kommentare (egal welchen Zeitraum Sie entschieden haben, "hot") und bestellen die Threads basierend darauf.

SELECT p.id, p.title, COUNT(c.created_at) as count 
FROM posts p, comments c 
WHERE p.id = c.post_id 
AND c.created_at > ***TIME YOU DETERMINE AS HOT*** 
GROUP BY p.id, p.title 
ORDER BY count DESC 

Ihre Spiele-Szenario wäre das gleiche Sie ähnliche Tabelle Setup vorausgesetzt, haben für diese Datenmodelle

** alles beachten Sie, dass Sie in der Auswahl setzen auch in der Gruppe, die Aussage sein **

0

Psuedo Code:

Select-ID, zählen Gruppe thematisch und Datum geordnet nach Zählung

-1

Sie haben versucht, Themen nach last_updated zu sortieren, aber das Ergebnis ist chaotisch: Die Threads, die Sie bei jeder Aktualisierung sehen, sind effektiv zufällig, und wenn Sie zur zweiten Seite springen, werden Ihnen möglicherweise viele der gleichen Ergebnisse angezeigt.

Sie können genaue Zeit erinnern, der Benutzer auf der ersten Seite angeklickt, und um von last_updated, die weniger oder gleich diesem Datum ist:

SELECT t.id, t.name, p.last_updated 
FROM threads t 
JOIN posts p 
ON  p.thread_id = t.id 
     AND p.last_updated <= @last_updated 
ORDER BY 
     p.last_updated DESC 

Dies wird Ihnen eine stabile resultset geben.

Aktualisieren Sie die Variable nur, wenn der Benutzer die Titelseite aktualisiert (und nicht die Klicks auf page 1, page 2 etc.)

+0

Das ist eine schreckliche Idee. Dadurch können Themen nur dann aus Ihrer Ergebnismenge springen, wenn sie aktualisiert wurden, nachdem Sie den letzten aktualisierten Zeitstempel festgelegt haben, sodass Sie nie einige der aktivsten Themen sehen werden. –

Verwandte Themen