Description
opened by kouho at 2021-07-21T10:22:19; updated 2025-01-27T11:12:43
状況のメモ Slackより転載
user_gold_collect_report.best_gold_collectとdaily_user_collect_gold.goldのユーザーごとの最大値が異なっています。
user_gold_collect_report.best_gold_collectはユーザーごとのこれまでの1日の最大集金額で
daily_user_collect_gold.goldはユーザーの日毎の集金額のため、
user_gold_collect_report.best_gold_collectとdaily_user_collect_gold.goldのユーザーごとの最大値が一致しないのは不具合と思います。
当日分はdaily_user_collect_goldが更新されていないため一致しなくても問題ないですが、
当日分以外で上記の状態になっているデータを190件確認しました。
問題対象取得クエリ
SELECT * FROM(
SELECT `user_gold_collect_report`.user_no, best_gold_collect_date ,best_gold_collect as best_gold,tmp_tb.gold as daily_gold
FROM `user_gold_collect_report`
INNER JOIN (
SELECT user_no, MAX(gold) as gold
FROM `daily_user_collect_gold`
GROUP BY `daily_user_collect_gold`.user_no
) as tmp_tb
ON `user_gold_collect_report`.user_no=`tmp_tb`.user_no
GROUP BY `user_gold_collect_report`.user_no ) as join_tb
WHERE join_tb.best_gold != join_tb.daily_gold
AND best_gold_collect_date != '2021-07-19'
kouho change_title at 2021-07-21T10:22:27: 集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする
[WIP]集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする
Comment
#12344 by kouho at 2021-07-21T10:28:11; updated 2021-07-21T10:28:11
S_GetUserGoldCollectReportで当日分の集金データと最高集金額を取得してたいところを
S_GetUserGoldCollectReportとS_GetBestUserGoldCollectReport の2つの関数に分けようとして失敗しています。
Comment
#12352 by wada at 2021-07-21T13:15:09; updated 2021-07-21T13:15:09
@kouho
この方向で合っていますか?
方針
- 当日分のデータは毎回集計
- 最高額も毎回取得
- 過去データはキャッシュ使用
対応
- 当日の集金額取得処理を分離
- 最高額取得処理を分離
- キャッシュは過去データ格納のみ使用
具体的な実装
---
既存の関数
S_UpdateTodayGoldCollectReport: 当日の集金データの更新
当日データは毎回集計するため関数不要
S_UpdateBestGoldCollectReport: 最高額の更新
比較用の当日データは、専用の関数から取得に変更
S_GetUserGoldCollectReport: 集金レポート表示用のデータを取得
過去データのみキャッシュに格納
当日データと最高額データは毎回取得し、過去データとマージして返す
過去データがキャッシュに入っている場合は、キャッシュから取得したデータと当日・最高額データをマージ
---
新規実装
当日の集金情報を集計する関数
当日のデータを取得、整形して返す
最高額を取得する関数
最高額を取得、整形して返す
レコードがなければ作成
Comment
#12356 by kouho at 2021-07-21T13:43:54; updated 2021-07-21T13:43:54
@wada
方向は和田さんにまとめていただもので良いかと思います。
wada add_label at 2021-07-26T17:17:09: レビュー待ち
Comment
#12424 by wada at 2021-07-26T17:22:23; updated 2021-07-26T17:22:23
@iwamoto @kouho
レビューお願いします。
対応方針に沿って修正しています。
2点追加対応入れています。
- 過去データは頻繁に更新する必要がなくなったので、キャッシュ期間を1日に延長
- 処理中にエラーが発生すると、集金だけ実行されて最高値が更新されないことがあったので、ロールバック対応を追加
wada change_title at 2021-07-26T17:24:09: [WIP]集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする
【7/27】集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする
Comment
#12460 by wada at 2021-07-27T14:18:45; updated 2021-07-27T14:18:45
最高額データの修正スクリプトはこのprに含めず、別対応します
Comment
#12463 by iwamoto at 2021-07-27T14:55:07; updated 2021-07-27T14:55:07
@wada
こちらレビューを行いました。
動作させてみましたが、問題ないようには感じます
iwamoto add_label at 2021-07-27T14:55:13: 岩本 LGTM
Comment
#12477 by kouho at 2021-07-27T19:13:09; updated 2021-07-27T19:13:09
@wada
対応ありがとうございます。確認しました。動作上問題なく、対応方針に沿って修正されていると思います。
kouho add_label at 2021-07-27T19:13:12: 皇甫 LGTM
wada merge at 2021-07-28T09:29:40: 【7/27】集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする
wada close at 2021-07-28T09:29:40: Close
wada refer at 2021-07-28T09:36:52: 1001:【7/28】集金レポート修正