実現したいこと・前提
実現したいこと
FirebaseとSwiftでInstagramのストーリーズのようなものを実装したアプリを作りたいのですが、Firestoreのdb設計で悩んでおりましてご意見いただきたいです。(プログラミング初心者でして言葉足らずな点などありましたらご指摘いただけるとありがたいです…)
前提
- Instagramのストーリーズのようなものを作りたい(仕様はインスタとほぼ同じ)
- 利用頻度やユースケースもほぼインスタ同じ(1日1ユーザーあたり1~10件程度投稿)
- ユーザー同士の関係はFFではなくフレンドでUserのサブコレクションにfriendsがある(/users/{uid}/friends/という感じ)フレンドの数は1人あたり10~100くらい
- インスタのホームのコレクションビューのときに友だちのStoryを取得して、コレクションビューをタップしてストーリー見る画面で一つ一つの投稿Snapを取得する
- モデルはユーザー毎のStoryドキュメントがありそのサブコレクションに一つ一つの投稿であるSnapsがある(ここは変更の余地あり)
- メインのプロパティは以下のような感じ(ここは変更の余地あり)
- Story
uid
createdAt
updatedAt
- Snap
url
createdAt
現状思いついた設計
案①
/stories/{storyID(userのuidと同じ)}/snaps
Storyのドキュメントはルートに書き込み、上記のStoryモデルにsubscribers: {"uid":Bool}のマップを追加する
自分が友だちのStoryの取得時はdb.collection(“stories”)whereField(“subscribers.(user.uid)", isEqualTo: true)で取得
案②
/users/{uid}/mySnaps/
/users/{uid}/subscribingStories/{storyID}/snaps
友だち全員のUserドキュメントのサブコレクションに自分のStoryドキュメントを書き込む
自分が友だちのStoryの取得時はdb.users.document(user.uid).collection(“stories”)で取得
悩んでいること
クエリのしやすさで言えば①が良さそうなのですが、①の場合はストーリーの投稿のたびにフレンドの数分のドキュメントを書き込まなければいけないので悩んでおります。
①②以外に他によりよい案があるかどうか、見落としているトレードオフの観点があるかどうかなど知りたいです。
あなたの回答
tips
プレビュー