Appearance
日別記事サマリ再計算バッチ
目的
日別記事画面で使う台別 raw データから、表示・検索で参照しやすい派生データを再計算する。対象は主に次の2系統。
- 機種別サマリ:
db_daily_article_kishu_single_day_summary - 日別記事表示用の事前計算 payload:
slot_precomputed_ranking
テーブル定義の正本は custom-tables.dbml を参照する。この文書には DB スキーマ詳細を書かず、いつ何を処理するかを記載する。
トリガー
| トリガー | 実行内容 |
|---|---|
slot_kouryaku_daily_data_imported | 台別データのインポート・削除後に対象 hall×日付を再計算する |
slot_kouryaku_daily_ranking_recompute | サイトタイムゾーン 02:00 の単発 WP-Cron 連鎖で、日別記事用のサマリと事前計算 payload を再計算する |
| 保守用バックフィル CLI | 必要性が確認できた場合だけ、指定期間の hall×日付を手動再計算する |
通常運用やデプロイ作業で、本番の過去期間バックフィルを定常的に実行する前提はない。
処理順
slot_kouryaku_daily_data_imported では、次の順で処理する。
DailyArticleKishuSingleDaySummaryComputerが機種別サマリを再計算する。PrecomputedRankingComputerが日別記事表示用 payload を再計算する。
サマリを先に更新することで、日別記事表示側が古いサマリを参照しないようにする。
slot_kouryaku_daily_ranking_recompute では、PrecomputedRankingHookRegistrar と DailyArticleKishuSingleDaySummaryHookHandler がそれぞれ Cron 用の再計算を行う。Cron 自体は PrecomputedRankingCronScheduler が単発イベント連鎖で登録し、旧 daily 再発火モデルからの移行も同 scheduler が担う。
機種別サマリの処理
DailyArticleKishuSingleDaySummaryComputer は、台別 raw(db2023)を hall×対象日単位で集計し、機種ごとの台数・平均差枚・合計差枚・順位・平均回転などを保存する。
対象 hall×日付の既存行は全削除し、再計算結果で全置換する。raw が存在しない場合は空状態として扱い、古いサマリ行が残らないようにする。
事前計算 payload の処理
PrecomputedRankingComputer は、日別記事表示用の DTO を組み立て、slot_precomputed_ranking に保存する。画面表示を短絡するための保存形式であり、分析用途の列指向データは機種別サマリ側を参照する。
台数変化との関係
機種別サマリ再計算時には、前日比テーブル db_daily_article_kishu_count_delta も更新される。台数変化の判定条件・管理画面・保守再計算の詳細は 機種台数変化バッチ を参照。
参照ファイル
core_src/Service/daily_article_kishu_single_day_summary/DailyArticleKishuSingleDaySummaryComputer.phpcore_src/Service/precomputed_ranking/PrecomputedRankingComputer.phpcore_src/Service/precomputed_ranking_hook_registrar/PrecomputedRankingHookRegistrar.phpcore_src/Util/precomputed_ranking/PrecomputedRankingCronScheduler.phpcore_src/Bootstrap/service_provider/AdminServiceProvider.phpdocs/design/テーブル定義/custom-tables.dbml