Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
Search
Sho Sasaki
December 22, 2024
Programming
1
850
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
Sho Sasaki
December 22, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.3k
Introduction to C Extensions
sylph01
3
130
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
320
PEPCは何を変えようとしていたのか
ken7253
3
320
フロントエンドオブザーバビリティ on Google Cloud
yunosukey
0
110
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
2.1k
iOSでQRコード生成奮闘記
ktcryomm
2
150
SwiftUI移行のためのインプレッショントラッキング基盤の構築
kokihirokawa
0
190
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
250
バイセルでの AI を用いた開発の取り組み ~ Devin, Cursor の活用事例・知見共有 ~
umaidashi
0
130
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
310
変化の激しい時代における、こだわりのないエンジニアの強さ
satoshi256kbyte
1
870
Featured
See All Featured
KATA
mclloyd
29
14k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Optimizing for Happiness
mojombo
377
70k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
115
51k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
Unsuck your backbone
ammeep
669
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
270
Transcript
毎日13時間もかかるバッチ処理を たった3日で60%短縮するために やったこと Sasaki Sho 2024/12/22 PHP Conference Japan 2024
Sasaki Sho X:@sho_ssk_ 所属:株式会社ウィルゲート 趣味:サッカー観戦
このLTで伝えたいこと
仕様変更も パフォーマンス改善に貢献できる!
対象のサービスについて
https://tact-seo.com/
• 検索キーワードに対して適切にページを 表示できるようにするためのツール
• 検索キーワードに対して適切にページを 表示できるようにするためのツール • リリースから7年経過、技術負債や蓄積 データ量および処理の長期化が課題
13時間かかるバッチについて
対象:サイトの順位データを集計するバッチ
対象:サイトの順位データを集計するバッチ • 仕様上、毎日“絶対に”完了しないといけない
対象:サイトの順位データを集計するバッチ • 仕様上、毎日“絶対に”完了しないといけない • 順位データおよびクライアント数の増加に より処理時間が長期化
対象:サイトの順位データを集計するバッチ • 仕様上、毎日“絶対に”完了しないといけない • 順位データおよびクライアント数の増加に より処理時間が長期化 • 毎日 1億件!以上のレコードをRDSへ追加
このバッチの問題点 2選
このバッチの問題点 2選 • 集計が完了しないと表示されない画面がある
このバッチの問題点 2選 • 集計が完了しないと表示されない画面がある • 集計中にRDSの負荷が高騰し、画面レスポン スに遅れが発生
このバッチの問題点 2選 • 集計が完了しないと表示されない画面がある • 集計中にRDSの負荷が高騰し、画面レスポン スに遅れが発生 顧客のUXに大きな悪影響
なんとかしよう!
①ロジック改修してみよう
①ロジック改修してみよう • 対象コードが超レガシー
①ロジック改修してみよう • 対象コードが超レガシー • 既に数十億単位のデータが存在するテーブルの 構成変更
①ロジック改修してみよう • 対象コードが超レガシー • 既に数十億単位のデータが存在するテーブルの 構成変更 無理そう
②ビジネスサイドへ利用状況を確認
②ビジネスサイドへ利用状況を確認 • そもそも全期間のデータ見てない
②ビジネスサイドへ利用状況を確認 • そもそも全期間のデータ見てない • 過去1年分くらい見れれば十分
②ビジネスサイドへ利用状況を確認 • そもそも全期間のデータ見てない • 過去1年分くらい見れれば十分 全期間の集計いらなくない?
集計期間を絞ろう!
やったこと
①表示期間を設定する画面を追加
①表示期間を設定する画面を追加
②SQLクエリへ1行追加
②SQLクエリへ1行追加 全期間を集計
②SQLクエリへ1行追加 全期間を集計 指定期間のみ集計
その結果
バッチの実行時間
13h → バッチの実行時間
13h → 5h バッチの実行時間
13h → 5h バッチの実行時間 60%の削減に成功! 🎉
圧倒的に少ない工数で対応
圧倒的に少ない工数で対応 40人日 →
40人日 → 3人日 圧倒的に少ない工数で対応
学んだこと
• 仕様変更もパフォーマンス改善に貢献でき る!
• 仕様変更もパフォーマンス改善に貢献でき る! • “今”必要なデータの質と量を確認しよう
“柔軟に”パフォーマンス 改善していきましょう!
fin