プロジェクト

全般

プロフィール

サポート #2207

未完了
アデ アデ

在庫管理の年度別集計をリファクタリング

サポート #2207: 在庫管理の年度別集計をリファクタリング

アルドリノ デフリン さんが3ヶ月前に追加.

ステータス:
新規
優先度:
通常
開始日:
2026/01/13
期日:
進捗率:

0%

予定工数:

説明

指示内容

問題

  • 管理画面アクセス
  • Livewire が state を評価
  • Filament が summarizer を呼ぶ
  • sum() が 重い SQL を発行
  • DB が計算
  • PHP が待つ
  • Nginx が待つ
  • fastcgi_read_timeout 超過
  • upstream timed out

やるべき修正(優先度順)

1. sum() を view 描画から外せ

Blade / Livewire / Summarizer 内で集計 ❌
Controller / Page クラスの mount() で 1回だけ 実行

public int $totalSales;

public function mount()
{
    $this->totalSales = Order::where(...)->sum('amount');
}

2. キャッシュしろ(必須)

$this->totalSales = Cache::remember(
    "sales_sum_fy_{$year}",
    3600,
    fn () => Order::where(...)->sum('amount')
);

3. 年度別集計テーブルを作れ

daily / monthly / yearly summary
cron or queue で更新
在庫・売上系は必ず事前集計。

レベル1:インクリメンタル集計(最優先)
考え方
データが「増減した瞬間」にだけ計算する
「見るとき」は読むだけ
具体例(売上合計)

❌ 毎回

SELECT SUM(amount) FROM orders WHERE ...

✅ 書き込み時

DB::table('sales_summary')
  ->where('year', $year)
  ->increment('total_amount', $amount);

ファイル

最適化案.md (25.2 KB) 最適化案.md アルドリノ デフリン, 2026/01/13 19:35

表示するデータがありません

他の形式にエクスポート: PDF Atom