【2020年版】Cloud Firestoreの基本機能とよくある心配点をまとめた
はじめに
仕事でリアルタイムアプリケーションを作ることになり、それにあたって色々な選択肢を検討した結果、ReactJS + Cloud Firestoreを使うことになりました。
旧Realtime Databaseからクエリやスケーリングが強化されたCloud Firestoreが正式リリースされて1年、ある程度の情報もまとまってきたことから、今回仕事で採用することにしました。
僕は昔からRealtime Databaseを個人的に使っていて、仕事で使うには心配な点がいくつかあったのですが、改めてCloud Firestoreをみてみたら知らなかった変更点が多くあったため、まとめてみました。
Firestore (Realtime Database)でよくある技術的な心配点
1. 検索(クエリ)の弱さ
Firestoreでは複合クエリに対応しています。また、Realtime Databaseよりも直感的に書くことができます。
// 一般的な検索
citiesRef.where("state", "==", "CA")
citiesRef.where("population", "<", 100000)
citiesRef.where("name", ">=", "San Francisco")
// regionsフィールドの配列にwest_coastを含むcitiesを返す
citiesRef.where("regions", "array-contains", "west_coast")
✖️できないこと:
OR
-> 2回検索して結果を結合する必要あり
!=
-> where("age", "<", "30")
は使えない。where("age", "<", "30")
とwhere("age", "<", "30")
を結合する必要あり。
2. データ構造の柔軟性
データが柔軟すぎるため破壊的変更の問題が起きるイメージでしたが、データ構造を検証することで、RDSのようにデータ構造を常に正規化しておくことができます。
Data Validation
https://firebase.google.com/docs/rules/data-validation
3. 深いネストで全て取得してしまう問題
Firebaseではネストが深くなった時、上位ノードを取得するとそれ以下を全て取得するため通信量やパフォーマンスに問題を与えることがあります。
これを解決するため、FirestoreではSubCollectionという機能が登場しました。
SubCollectionはRDBにもないFirestore独自の概念です。Collectionの中のDocumentが内部に持つCollectionのことをSubCollectionと言います。
さらに、CollectionGroupと組み合わせることで横断的なクエリを用意することが可能です。
詳しい使い方は、Firestoreに関して様々情報発信されている1amageekさんの記事で解説されています。
https://qiita.com/1amageek/items/343f262ba3b50e657078
4. WEB SDKでのオフラインサポート
Realtime DatabaseではできませんがFirestoreでは標準でサポートしています。
5. スケーリング
Firestoreでは自動スケーリング+マルチリージョンに対応しています。
参考記事
とても参考にさせていただきました。
テスト駆動開発
以下の記事で、TypeScript + Jest + セキュリティルールを用いて、テスト駆動開発を行うやり方が紹介されています。
https://qiita.com/ryo2132/items/02b4d341fb01f04ec0be
データベース設計
よく問題になる1対多、多対多などのDB設計に関しては、1amageekさんの記事でかなり詳しく紹介されています。
https://qiita.com/1amageek/items/d606dcee9fbcf21eeec6
Author And Source
この問題について(【2020年版】Cloud Firestoreの基本機能とよくある心配点をまとめた), 我々は、より多くの情報をここで見つけました https://qiita.com/wktq/items/9e72c2bec663b41ad56c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .