データ構造の選択

Cloud Firestore でのデータの構造化には、いくつかのオプションがあります。

  • ドキュメント
  • 複数のコレクション
  • ドキュメント内のサブコレクション

各オプションの利点を考慮して使用ください。このガイドでは、階層データの構造の例をいくつか紹介しています。

ドキュメント内のネストデータ

ドキュメント内に配列やマップなどの複雑なオブジェクトをネストできます。

  • 利点: ドキュメント内に単純な固定データリストを保持するような場合に、データ構造の設定と効率化を簡単に実現できます。
  • 制限事項: 特に、データが時間の経過とともに拡大する場合は、他のオプションのようなスケーラビリティはありません。リストが大きくなったり、増加したりすると、ドキュメントも大きくなり、検索時間が遅くなる可能性があります。
  • 適用可能なユースケース: チャットアプリで、ユーザーが最近閲覧した 3 つのチャットルームを、ネストされたリストとしてプロフィールに保存する。
  • alovelace
    •     name :
            first : "Ada"
            last : "Lovelace"
          born : 1815
          rooms :
            0 : "Software Chat"
            1 : "Famous Figures"
            2 : "Famous SWEs"

サブコレクション

データが時間とともに増加する可能性がある場合、ドキュメント内にコレクションを作成できます。

  • 利点: リストが大きくなっても、親ドキュメントのサイズが変わりません。サブコレクションに対しても、すべてのクエリ機能を使用でき、複数のサブコレクションにまたがるコレクション グループ クエリを発行できます。
  • 制限事項: サブコレクションを簡単に削除することはできません。
  • 適用可能なユースケース: 同じチャットアプリで、ユーザーやメッセージのデータをチャットルームのドキュメント内のコレクションとして作成する。
  • science
    • software
        name : "software chat"
      • users
        • alovelace
              first : "Ada"
              last : "Lovelace"
        • sride
              first : "Sally"
              last : "Ride"`


    • astrophysics
      • ...

ルートレベルのコレクション

性質の異なるデータセットをまとめるには、データベースのルートレベルでコレクションを作成します。

  • 利点: ルートレベルのコレクションは、多対多の関係に適しており、各コレクション内で強力なクエリを実行できます。
  • 制限: データが階層的になっていることから、データベースが拡大するにつれ、データの取得が難しくなる可能性があります。
  • 適用可能なユースケース: 同じチャットアプリで、ユーザー用に 1 つ、チャットルームとメッセージ用に 1 つそれぞれコレクションを作成する。
  • users
    • alovelace
          first : "Ada"
          last : "Lovelace"
          born : 1815
    • sride
          first : "Sally"
          last : "Ride"
          born : 1951
  • rooms
    • software
      • messages
        • message1
              from : "alovelace"
              content : "..."
        • message2
              from : "sride"
              content : "..."