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

20200821_CookpadTechKitchen_24_.pdf

hyoga
August 21, 2020
420

 20200821_CookpadTechKitchen_24_.pdf

「CookpadTechKitchen#24 5800万人が使うサービスのリニューアルとその技術」
でお話させて頂いた「気兼ねなく「レシピを保存」するために」の資料です

https://cookpad.connpass.com/event/183385/

hyoga

August 21, 2020
Tweet

Transcript

  1. 1. そもそも保存とは? 2. リニューアル前の保存体験: MYフォルダ 3. リニューアル後の保存体験: クリップ 4. クリップ機能を作っていく

    a. MYフォルダという資産を流用したい...が 5. clip_backend a. 実現したいこと b. DynamoDBを採用 c. DynamoDBのテーブル設計 d. 捨てやすいように使う 目次
  2. リニューアル前後の比較 クリップ なし 有料会員機能に 分類する必要はない (可能ではある) 保存制限 検索 フォルダ分け MYフォルダ

    無料会員: 20件 有料会員: 3000件 制限無し (保存制限があるので実質有料会員機能 ) 分類することが前提の デザインになっている
  3. MYフォルダという資産を流用したい...が • DBはMySQL ◦ id, user_id, recipe_id などをもっていて割とシンプル • ただしApplication側がカオス...

    ◦ あるユーザの1ページ目を取得しようとすると、そのユーザのMY フォルダが全件cacheに乗る ◦ MYフォルダ内で”鶏肉”と検索すると, 1. cookpadの全レシピから “鶏肉” のレシピを検索する 2. ユーザの持つMYフォルダのレシピとの積集合を取る
  4. • 時系列データを扱う • あるレシピの存在確認 ただし • (気兼ねなくクリップしてほしいので) 書き込みがたくさん来ても耐えら れる •

    (保存制限がなくなったので) 保存数が多くても性能低下しない という条件つき! 実現したいこと
  5. PartitionKey SortKey other info user_id CLIP_LOG_#{created_at} user_id recipe_id created_at CLIP_SMR_#{recipe_id}

    user_id recipe_id created_at modified_at clipped _count # 時系列データの取得 → query(pk = user_id, begins_with = “CLIP_LOG_”) # あるレシピをクリップしたことがあるか → get_item(pk = user_id, sk = “CLIP_SMR_#{recipe_id}”) DynamoDBのテーブル設計
  6. DynamoDBを採用した結果 • 運用という運用をしたことは一度もない • 書き込み自体は今のところ 約2百万 / day くらい ◦

    リニューアル前と比べて保存数が約25%上がったけれど全 然だいじょうぶ ‍♂ • (3000件制限だったが、制限がなくなり)最大で, 約4万件保存し ている人が存在しているが, 読み込みも問題なし