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
ランダム処理を修正し、DBの負荷を下げた話
Search
Keisuke Yamauchi
April 12, 2024
0
22
ランダム処理を修正し、DBの負荷を下げた話
Keisuke Yamauchi
April 12, 2024
Tweet
Share
More Decks by Keisuke Yamauchi
See All by Keisuke Yamauchi
Cake.jpのCRM 今と未来
kechiiin
0
26
半年かけてPHP5.6からPHP7.4までバージョンアップした苦労と工夫 PHPカンファレンス福岡2024
kechiiin
1
370
(弊社の)OpenSearchに潜んでいた罠
kechiiin
0
59
before/afterで見る Cake.jpのアジャイル開発
kechiiin
0
12
レガシーからモダンへ? PHP5.6からの脱却
kechiiin
0
240
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
The Language of Interfaces
destraynor
154
24k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
740
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Gamification - CAS2011
davidbonilla
80
5k
Building an army of robots
kneath
302
43k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Agile that works and the tools we love
rasmusluckow
327
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Transcript
© Cake.jp Co.Ltd. All Right Reserved.|Confidential 2024/04/11 ランダム処理を修正し、DBの負荷を 下げた話
山内 啓輔
2 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 自己紹介 山内 啓輔
やまうち けいすけ 担当業務 カテゴリーページ、検索機能など 🍰おすすめスイーツ 元祖かぼちゃプリン 約1.2kg かぼちゃ感が強く、甘さが控えめで美味し い! 付属のカラメルをかけることで甘さもアップ カテゴリページ 検索機能
3 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1. 何が起きたのか
2. どういった処理なのか 3. どういった対応をしたのか 4. その対応でどうなったのか 5. まとめ
4 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1. 何が起きたのか
2. どういった処理なのか 3. どういった対応をしたのか 4. その対応でどうなったのか 5. まとめ
5 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 何が起きたのか 前提:商品詳細ページについて どういった商品なのか確認できる商品詳細と呼ぶページがある
https://cake.jp/item/3388709/
6 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 何が起きたのか 該当箇所 「この商品を見た人は、こんな商品も見ています
」という、 おすすめ商品を出している箇所の夜間バッチ
7 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 何が起きたのか 事象 DBの負荷が爆上がりで、サイトにアクセスできない状況が発生した
8 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1. 何が起きたのか
2. どういった処理なのか 3. どういった対応をしたのか 4. その対応でどうなったのか 5. まとめ
9 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった処理なのか ざっくり判断基準 ブックマークを元に、その商品とのおすすめ度を判断している
ちょっと詳しく 対象の商品をブックマーク・購入している人がブックマークしている商品をおすすめの商品としている それを公開中の全商品分、夜間に行っている ※全商品 = 約8000商品、ブックマーク数 = 約130万件
10 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった処理なのか SQLのイメージ
11 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった処理なのか SQLのイメージ ※約130万件を8000回
12 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1. 何が起きたのか
2. どういった処理なのか 3. どういった対応をしたのか 4. その対応でどうなったのか 5. まとめ
13 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった対応をしたのか 対象を減らした ・過去のすべてデータを取るのではなく、過去
1年に減らす ・10件以上ブックマークされているもののみ取得 5000件程度まで対象が減る
14 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった対応をしたのか ループ内での取得をやめる ループで行うべき条件がない・・・!
事前に取得をしておき、その結果をループで使用するように変更した ※再掲
15 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった対応をしたのか SQLのランダム処理をやめる 100万件を超える取得結果に対してのランダム処理が処理が重いので、アプリ側で行うようにした
16 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった対応をしたのか 対応まとめ ・検索対象を減らした
・過去のすべてデータを取るのではなく、過去 1年に減らす ・10件以上ブックマークされているもののみ取得 ・ループ内での処理をやめる ・ループ前にやっておける重い処理を事前に行った ・SQLでのランダム処理をやめた ・負荷の高いORDER BY RAND()をやめ、アプリで行うようにした
17 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1. 何が起きたのか
2. どういった処理なのか 3. どういった対応をしたのか 4. その対応でどうなったのか 5. まとめ
18 © Cake.jp Co.Ltd. All Right Reserved.|Confidential その対応でどうなったのか 負荷が下がった!!
19 © Cake.jp Co.Ltd. All Right Reserved.|Confidential その対応でどうなったのか グラフがこうなった
20 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1. 何が起きたのか
2. どういった処理なのか 3. どういった対応をしたのか 4. その対応でどうなったのか 5. まとめ
21 © Cake.jp Co.Ltd. All Right Reserved.|Confidential まとめ 得られた知見 ・この機能が作られた当初(2020/06)は問題にはなっていなかったが、データ量が増えたことでパ
フォーマンスの問題が露見した。 データの増加を見越して、負荷の高いクエリになっていないかどうかを意識してコードを書く必要があ る。 ・ループ内で行っている処理は、事前にまとめて行うことが可能かどうかを常に考える必要がある