Cloud Firestore >> Add and manage data >> Structure data
Cloud Firestoreであなたのデータ構築する時、いくつかの方法があります。
- Documents
- Multiple collections
- Subcollections within documents
それぞれの方法の利点をあなたのユースケースと照らし合わせて考えていきましょう。このガイドでいくつかの階層構造のデータの構築のサンプルを見ていきます。
Contents
Nested data in documents
ドキュメント内で、配列やマップのように複雑なオブジェクトをネストする方法です。
利点:ドキュメント内で長さの決まっているシンプルなlists(配列)データがある場合、セットアップが用意です。
制限:他の方法のようなスケーラビリティはありません。リストの長さが大きくなると、ドキュメントも大きくなります。そうするとドキュメント取得に時間がかかります。
ユースケース:例えば、チャットアプリのプロフィール内で、そのユーザの最近の3つの訪れたチャットルームを保存したい場合。
Subcollections
時間の経過と共にデータ量が増える可能性のあるデータの場合ドキュメント内にサブコレクションを生成する方法が良いです。
利点:ドキュメント内のリスト(配列)の要素数が増えても、ドキュメントのサイズを変えたくない場合に適しています。サブコレクションに置いて完全なクエリ能力を獲得できます。また、サブコレクションに対してcollection group queriesを発することができます。
制限:サブコレクションを簡単に削除することができません。
ユースケース:例えば、チャットアプリで、チャットルームドキュメントの中にusersサブコレクションを作る、あるいはチャットルームドキュメントの中にmessagesサブコレクションを作る、というようなケース。
Root-level collections
異なる種類のデータセットを扱うために、Firestoreのルートレベルに複数のコレクションを作る方法です。
利点:ルートレベルのコレクションは、多対多の関係に適しており、各コレクション内で強力なクエリを提供します。
制限:自然に階層化されたデータを取得することは、データベースが大きくなるにつれてますます複雑になる可能性があります。
ユースケース:例えば、チャットアプリで、Firestoreのルートレベルに
- usersコレクション
- roomsコレクション
の二つのコレクションを作成する場合。
参考
https://firebase.google.com/docs/firestore/manage-data/structure-data?authuser=0