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
N+1はダメなのか? システムを落としたあの日より
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hayato Nakamura
May 10, 2024
69
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
N+1はダメなのか? システムを落としたあの日より
2024-04-11
Cake.jp LT会 登壇資料
https://cakejp.connpass.com/event/314516/
Hayato Nakamura
May 10, 2024
More Decks by Hayato Nakamura
See All by Hayato Nakamura
定時実行の設定が難しいから、 仕組みで解決をしている話
chikin14niwa
0
120
呼び出し順で、 売上金額を回収できなくした話
chikin14niwa
0
96
重要だけど、 よく忘れる仕様との付き合い方
chikin14niwa
0
120
Sessionの衝突から学んだPHPのSession作成方法 @CakeJP 2023/12/13 エンジニア小話会 PHPを語り合おう
chikin14niwa
0
450
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
480
The Language of Interfaces
destraynor
162
27k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
440
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
290
Making Projects Easy
brettharned
120
6.7k
From π to Pie charts
rasagy
0
250
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
My Coaching Mixtape
mlcsv
0
200
Building the Perfect Custom Keyboard
takai
2
830
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Transcript
© Cake.jp Co.Ltd. All Right Reserved.|Confidential N+1はダメなのか? システムを落としたあの日より
中村 隼人
2 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 自己紹介 • 名前
◦ 中村 隼人 • 業務 ◦ バックエンドエンジニア(PHP/Kotlin/TypeScript) • おすすめ🍰 ◦ 子どもが野菜を食べてくれる ◦ 大人が食べてもおいしい
3 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 1つのクエリの実行結果を元に、N回の追加のクエリが発行されてしまう問題 N+1問題ってなに?
4 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 15000件のデータから、ID1000以降のデータを1000件抽出。 実験
5 © Cake.jp Co.Ltd. All Right Reserved.|Confidential N+1を許容する場合 ・・・ 0.03s +
0.02s * 1000 = 20.03s N+1を許容しない場合・・・ 0.03s 実験
6 © Cake.jp Co.Ltd. All Right Reserved.|Confidential • Nの件数が少ない、Nの実行時間が短ければそれほど影響はない。 ◦
Nが動的に変化する場合がある。 ◦ 実行時間は1クエリの実行時間のみに依存しない。 • ORMが意図しないN+1を引き起こす可能性がある。 まとめ
7 © Cake.jp Co.Ltd. All Right Reserved.|Confidential • 商品に複数の送料を設定できるようにした。 •
API経由で送料を取得できるようにした。 • 送料は商品単位で取得できる。 Cake.jpで実際にあった事例 - 送料プロジェクト -
8 © Cake.jp Co.Ltd. All Right Reserved.|Confidential • 商品に複数の送料を設定できるようにした。 •
API経由で送料を取得できるようにした。 • 送料は商品単位で取得できる。 Cake.jpで実際にあった事例 - 送料プロジェクト - ある商品一覧で システムアラートが発生!! 504エラーが多発!
9 © Cake.jp Co.Ltd. All Right Reserved.|Confidential • その商品一覧では、それぞれの商品に送料を表示するロジックがあった。 ◦
もともとは商品テーブルに送料のカラムがあり、送料取得部分をAPI コールに単純に置き換えた。 → これがN+1になった。 ◦ メインの商品一覧では送料を表示するロジックがなかったため、一括で 複数商品の送料を取得するエンドポイントがなかった。 ◦ 商品の表示数が設定ファイルによって決定され、普段は表示する商品 数が少なく問題に気付けなかった。 Cake.jpで実際にあった事例 - 送料プロジェクト -
10 © Cake.jp Co.Ltd. All Right Reserved.|Confidential • N+1はシステムを落とす。 ◦
運がよくアクセス数が少なかったり、Nが少ないと気づけない。 ◦ エンドポイント設計は適切に。(一括取得機能がなかった) • 実行されているクエリ数、API発行数は見る。 Cake.jpで実際にあった事例 - まとめ -