次の表があります:1。ビュー2。 views_hourly_summary3。 views_daily_summary4。 views_monthly_summary5。 views_alltime_summary
次の間隔でcronジョブを実行します:
-
1時間ごとに実行し、viewsテーブルからその時間のビューを事前に集計し、事前に集計された結果をviews_hourly_summaryテーブルに保存し、views_alltime_summaryテーブルも更新します
-
毎日の終わりに実行し、時間テーブルからその日のビューを事前に集計し、事前に集計された結果をviews_daily_summaryテーブルに保存します
-
毎月の終わりに実行し、時間テーブルからその日のビューを事前に集計し、事前に集計された結果をviews_daily_summaryテーブルに保存します
次に、結果を取得するときは、次のように計算する必要があります。
-
たとえば、過去4時間のビューをフェッチする場合、毎時テーブルから3時間のデータをフェッチし、残りのデータについては次のようにビューテーブルからフェッチします。
item_id、sum(views)をviews_hourly_summaryからviewsとして選択します。ここで、concat(left(now()-interval 3 hour、14)、 '00:00')とconcat(left(now()、14)、'00:00'の間の時間)item_idでグループ化
ユニオン
item_id、count(1)をビューからのビューとして選択します。datetime(now()-間隔4時間)とconcat(left(now()-間隔3時間、14)、 '00:00')またはdatetime> concat(left( now()、14)、 '00:00')group by item_id