Firestore について 調べた内容を随時追記します。
該当箇所のリファレンスを貼り付ける形式にします。(時間節約&信憑性確保のため)
Firestore とは
クラウドベースの NoSQL データベース。
Cloud Firestore は、クラウドホストの NoSQL データベースであり、iOS アプリ、Android アプリ、およびウェブアプリからネイティブ SDK を介して直接アクセスできます。
https://firebase.google.com/docs/firestore?hl=ja
Firestore は、Firebase が提供する2種あるデータベースの内の1つ。
Firebase は、クライアント アクセスやリアルタイムのデータ同期が可能な 2 つのクラウドベースのデータベース ソリューションを提供します。
・ Cloud Firestore は、Firebase のモバイルアプリ開発用の最新データベースです。直感的な新しいデータモデルでRealtime Database をさらに強化しています。Cloud Firestore は、Realtime Database よりも多彩で高速なクエリと高性能なスケーリングが特長です。
・ Realtime Database は従来からある Firebase のデータベースです。リアルタイムのクライアント間同期が必要なモバイルアプリのための、効率的でレイテンシが低いソリューションです。
https://firebase.google.com/docs/firestore/rtdb-vs-firestore?hl=ja
主な特長
こちらより重要っぽい機能をピックアップして記載する。
柔軟性
階層構造を持つデータモデル。
コレクション -> ドキュメント -> データ
Cloud Firestore データモデルは、柔軟な階層型データ構造に対応しています。データはドキュメントに格納され、ドキュメントはコレクションにまとめられます。ドキュメントには、サブコレクションの他に複雑なネスト オブジェクトを含めることができます。
ネスト構造による拡張もできる。
ドキュメント内にサブコレクションを作成し、データベースの拡大に合わせて拡張できる階層型データ構造を構築できます。
高機能なクエリ処理
Cloud Firestore では、個別のドキュメントを取得する場合や、クエリ パラメータに一致するすべてのドキュメントをコレクションで取得する場合に、クエリを使用できます。クエリには複数の連鎖フィルタを使用でき、またフィルタ処理と並べ替え処理を組み合わせることができます。デフォルトではクエリにはインデックスが付いているので、クエリのパフォーマンスは、データセットではなく結果セットのサイズに比例します。
スケーラビリティのある設計
Cloud Firestore は、Google Cloud の強力なインフラストラクチャの優れた機能(自動マルチリージョン データ複製、強整合性の保証、アトミックなバッチ オペレーション、リアル トランザクション サポート)を提供します。Cloud Firestore は、世界でも最大規模のアプリからの最も過酷なワークロードに対応できるように設計されています。
データモデル
ドキュメント内のデータはキーバリューのペアで格納される。
各「ドキュメント」には、一連のキーと値のペアが含まれています。Cloud Firestore は、小型のドキュメントの大きなコレクションを格納するために最適化されています。
ベストプラクティス
データベースのロケーション
コンピューティングリソースと同じロケーションに設置してホップを少なくする。
データベース インスタンスを作成するときは、ユーザーとコンピューティング リソースに最も近いデータベースのロケーションを選択してください。広範囲に及ぶネットワーク ホップはエラーが発生しやすく、クエリのレイテンシを増加させます。
同一ドキュメントに対する更新
ドキュメントの書き込み上限は 1 秒あたり 1 回、同時接続数の上限はデータベースあたり 1,000,000 件であることに注意してください。これらの上限はソフトリミットであり、Cloud Firestore によって超過が制限されるものではありません。ただし、これらの上限を超えると、全体的な読み取りと書き込みのレートによっては、パフォーマンスに影響することがあります。
同じドキュメントを 1 秒間に何度も更新しないでください。ドキュメントを頻繁に更新しすぎると、アプリケーションで競合が発生します。レイテンシの増加やタイムアウト、その他のエラーなども発生します。
データの管理
トランザクションの失敗
トランザクションが失敗するとエラーが返され、データベースには何も書き込まれません。トランザクションをロールバックする必要はありません。ロールバックは Firestore により自動的に実行されます。
https://cloud.google.com/firestore/docs/manage-data/transactions?hl=ja#transaction_failure