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
25
ランダム処理を修正し、DBの負荷を下げた話
Keisuke Yamauchi
April 12, 2024
Tweet
Share
More Decks by Keisuke Yamauchi
See All by Keisuke Yamauchi
動的型付け言語に抗うPHPStanという戦士
kechiiin
0
16
Cake.jpのCRM 今と未来
kechiiin
0
36
半年かけてPHP5.6からPHP7.4までバージョンアップした苦労と工夫 PHPカンファレンス福岡2024
kechiiin
1
520
(弊社の)OpenSearchに潜んでいた罠
kechiiin
0
99
before/afterで見る Cake.jpのアジャイル開発
kechiiin
0
15
レガシーからモダンへ? PHP5.6からの脱却
kechiiin
0
290
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
104
19k
Six Lessons from altMBA
skipperchong
27
3.7k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
How to Ace a Technical Interview
jacobian
276
23k
Fireside Chat
paigeccino
37
3.4k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
Music & Morning Musume
bryan
47
6.5k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
560
Agile that works and the tools we love
rasmusluckow
328
21k
Visualization
eitanlees
146
16k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
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)は問題にはなっていなかったが、データ量が増えたことでパ
フォーマンスの問題が露見した。 データの増加を見越して、負荷の高いクエリになっていないかどうかを意識してコードを書く必要があ る。 ・ループ内で行っている処理は、事前にまとめて行うことが可能かどうかを常に考える必要がある