Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ランダム処理を修正し、DBの負荷を下げた話

Keisuke Yamauchi
April 12, 2024
15

 ランダム処理を修正し、DBの負荷を下げた話

Keisuke Yamauchi

April 12, 2024
Tweet

Transcript

  1. 2 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 自己紹介 山内 啓輔

    やまうち  けいすけ 担当業務 カテゴリーページ、検索機能など 🍰おすすめスイーツ 元祖かぼちゃプリン 約1.2kg かぼちゃ感が強く、甘さが控えめで美味し い! 付属のカラメルをかけることで甘さもアップ カテゴリページ 検索機能
  2. 3 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1.  何が起きたのか

    2.  どういった処理なのか 3.  どういった対応をしたのか 4.  その対応でどうなったのか 5.  まとめ
  3. 4 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1.  何が起きたのか

    2.  どういった処理なのか 3.  どういった対応をしたのか 4.  その対応でどうなったのか 5.  まとめ
  4. 8 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1.  何が起きたのか

    2.  どういった処理なのか 3.  どういった対応をしたのか 4.  その対応でどうなったのか 5.  まとめ
  5. 9 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった処理なのか ざっくり判断基準 ブックマークを元に、その商品とのおすすめ度を判断している

    ちょっと詳しく 対象の商品をブックマーク・購入している人がブックマークしている商品をおすすめの商品としている それを公開中の全商品分、夜間に行っている ※全商品 = 約8000商品、ブックマーク数 = 約130万件
  6. 12 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1.  何が起きたのか

    2.  どういった処理なのか 3.  どういった対応をしたのか 4.  その対応でどうなったのか 5.  まとめ
  7. 13 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった対応をしたのか 対象を減らした ・過去のすべてデータを取るのではなく、過去

    1年に減らす ・10件以上ブックマークされているもののみ取得 5000件程度まで対象が減る
  8. 16 © Cake.jp Co.Ltd. All Right Reserved.|Confidential どういった対応をしたのか 対応まとめ ・検索対象を減らした

      ・過去のすべてデータを取るのではなく、過去 1年に減らす   ・10件以上ブックマークされているもののみ取得 ・ループ内での処理をやめる   ・ループ前にやっておける重い処理を事前に行った ・SQLでのランダム処理をやめた   ・負荷の高いORDER BY RAND()をやめ、アプリで行うようにした
  9. 17 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1.  何が起きたのか

    2.  どういった処理なのか 3.  どういった対応をしたのか 4.  その対応でどうなったのか 5.  まとめ
  10. 20 © Cake.jp Co.Ltd. All Right Reserved.|Confidential 今日話す内容 1.  何が起きたのか

    2.  どういった処理なのか 3.  どういった対応をしたのか 4.  その対応でどうなったのか 5.  まとめ
  11. 21 © Cake.jp Co.Ltd. All Right Reserved.|Confidential まとめ 得られた知見 ・この機能が作られた当初(2020/06)は問題にはなっていなかったが、データ量が増えたことでパ

    フォーマンスの問題が露見した。 データの増加を見越して、負荷の高いクエリになっていないかどうかを意識してコードを書く必要があ る。 ・ループ内で行っている処理は、事前にまとめて行うことが可能かどうかを常に考える必要がある