Skip to content

日別記事サマリ再計算バッチ

目的

日別記事画面で使う台別 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 では、次の順で処理する。

  1. DailyArticleKishuSingleDaySummaryComputer が機種別サマリを再計算する。
  2. PrecomputedRankingComputer が日別記事表示用 payload を再計算する。

サマリを先に更新することで、日別記事表示側が古いサマリを参照しないようにする。

slot_kouryaku_daily_ranking_recompute では、PrecomputedRankingHookRegistrarDailyArticleKishuSingleDaySummaryHookHandler がそれぞれ 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.php
  • core_src/Service/precomputed_ranking/PrecomputedRankingComputer.php
  • core_src/Service/precomputed_ranking_hook_registrar/PrecomputedRankingHookRegistrar.php
  • core_src/Util/precomputed_ranking/PrecomputedRankingCronScheduler.php
  • core_src/Bootstrap/service_provider/AdminServiceProvider.php
  • docs/design/テーブル定義/custom-tables.dbml