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
1.3k
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
Sho Sasaki
December 22, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で
koxya
1
1.1k
実践AIチャットボットUI実装入門
syumai
7
2.5k
株式会社 Sun terras カンパニーデック
sunterras
0
220
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
240
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.9k
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.5k
階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜
yuhisatoxxx
3
910
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
110
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
150
CSC305 Lecture 01
javiergs
PRO
1
400
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
140
Your Perfect Project Setup for Angular @BASTA! 2025 in Mainz
manfredsteyer
PRO
0
130
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Code Review Best Practice
trishagee
72
19k
Music & Morning Musume
bryan
46
6.8k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A Tale of Four Properties
chriscoyier
160
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Writing Fast Ruby
sferik
629
62k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
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