Ich habe eine Tabelle mit dem Namen topic
, die eine Spalte mit dem Namen like_count
hat.MySQL-Design: Eine Abfrage zum Abrufen mit den meisten Aktionen innerhalb eines bestimmten Zeitraums
Ist es möglich, eine Anfrage zu dieser Tabelle zu schreiben, um "die Top 10 beliebtesten Themen in den letzten 7 Tagen zu geben", also die 10 Themen, die in den letzten 7 Tagen die meisten Likes hatten, ohne eine zusätzliche Auditing-Tabelle zu erstellen?
Ich dachte daran, dies zu tun, indem Sie eine Auditing-Tabelle wie topic_like_audit
erstellen, die nur zwei Spalten hätte: topic_id
und created_at
. Jedes Mal, wenn das Thema mit dieser ID gefallen ist, wird ein neuer Datensatz in der Audit-Tabelle gespeichert. Dann kann ich eine Abfrage schreiben, die alle Ergebnisse innerhalb der letzten 7 Tage mit der Spalte created_at
aggregiert und nach den Rängen sortiert, die die meisten Datensätze in diesem Zeitraum enthalten.
Aber ich kann mir nicht vorstellen, dass es eine skalierbare Lösung ist ... es mag auf kurze Sicht funktionieren, aber das muss sicherlich schlecht sein, wenn Sie Themen haben, die Millionen oder sogar Hunderttausende von Likes haben.
Irgendwelche guten Standardlösungen, wenn Sie so etwas tun, oder reicht mein Ansatz aus? P.S. Ich bin ein DB-Noob.
Die vorgeschlagene Audit-Tabelle mit entsprechender Indizierung sollte praktikabel sein. Wenn Sie sich vorstellen, dass sie in Millionen von Zeilen vorgeht, können Sie sie partitionieren (vielleicht nach Monat oder Jahr?) und/oder erwägen, Zeilen zu archivieren, die für den aktuellen Standortbetrieb nicht relevant sind. –
@Used_By_Already Sie machen tatsächlich einen wirklich guten Punkt, könnten nur Datensätze löschen, die älter als ein bestimmter Zeitraum sind, um die Tabellengröße zu reduzieren. Danke für den Tipp. – Lansana
übrigens zu lösen '" geben Sie mir die Top 10 beliebtesten Themen in den letzten 7 Tagen "' Sie brauchen Datetime-Informationen für jeden wie –