topic
というテーブルがあり、そのテーブルのカラムはlike_count
です。MySQLデザイン:特定の期間内に大部分のアクションを含むコレクションを取得するクエリ
このテーブルにクエリを書き込んで、過去7日間に最も好きだった10のトピックを意味する「過去7日間で最も人気のあったトピックのトップ10を」と尋ねることは可能ですか?追加の監査テーブルを作成せずに
topic_like_audit
のような監査テーブルを作成することで、これは2つの列(topic_id
とcreated_at
)を作成することによってこれを行うと考えていました。そのIDを持つトピックが好きになるたびに、新しいレコードが監査テーブルに格納されます。次に、created_at
列を使用して過去7日間のすべての結果を集計し、その期間内に最も多くのレコードを持つものでランク付けするクエリを作成できます。
しかし、私はそれがスケーラブルな解決策であるとは想像できません...短期間ではうまくいくかもしれませんが、何百万人、あるいは何十万人もの好きなトピックを持っているときは必ず悪くなるはずです。
このようなことを行う上での優れた標準的な解決策、または私のアプローチは十分ですか? P.S.私はDBのnoobです。
推奨される監査テーブルは適切なインデックス付けが可能でなければなりません。 (おそらく月または年によって)、および/または現在のサイト操作に関連しない行をアーカイブすることを検討してください。 –
@Used_By_Alreadyあなたは実際に本当に良い点を作っています。テーブルサイズを減らすために特定の時間枠よりも古いレコードを削除することができます。先端に感謝します。 – Lansana
解決方法は、過去7日間で最も好きなトピックのトップ10を与えてください。 "あなたはそれぞれのような日時情報が必要です。 –