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
21
ランダム処理を修正し、DBの負荷を下げた話
Keisuke Yamauchi
April 12, 2024
Tweet
Share
More Decks by Keisuke Yamauchi
See All by Keisuke Yamauchi
Cake.jpのCRM 今と未来
kechiiin
0
23
半年かけてPHP5.6からPHP7.4までバージョンアップした苦労と工夫 PHPカンファレンス福岡2024
kechiiin
1
350
(弊社の)OpenSearchに潜んでいた罠
kechiiin
0
57
before/afterで見る Cake.jpのアジャイル開発
kechiiin
0
12
レガシーからモダンへ? PHP5.6からの脱却
kechiiin
0
240
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
A Tale of Four Properties
chriscoyier
156
23k
The Art of Programming - Codeland 2020
erikaheidi
51
13k
Fireside Chat
paigeccino
32
3k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Bash Introduction
62gerente
608
210k
Automating Front-end Workflow
addyosmani
1365
200k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
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)は問題にはなっていなかったが、データ量が増えたことでパ
フォーマンスの問題が露見した。 データの増加を見越して、負荷の高いクエリになっていないかどうかを意識してコードを書く必要があ る。 ・ループ内で行っている処理は、事前にまとめて行うことが可能かどうかを常に考える必要がある