Cloud FirestoreはFirebaseのサービスの1つで下記特徴があります。
Google の柔軟でスケーラブルな NoSQL クラウド データベースを使用して、クライアント側開発とサーバー側開発のデータを保存、同期します。

- 柔軟性
- 高機能なクエリ処理
- リアルタイムアップデート
- オフラインサポート
- 拡張性のある設計
これらに対して実際にプロダクション環境で使った経験談を深掘りしたいと思います。
Cloud Firestoreのメリット
クライアントからリアルタイムにデータを取得できる
Cloud Firestoreの1番のメリットはサーバを介さずに直接Firestoreにアクセスでき、リアルタイムに更新されたデータを取得できることですね。クライアントはリアルタイムに取得したいコレクションとドキュメントに対してListenするだけで簡単に実現できます。
Firestoreを使わずに実現しようとするとWebsocketサーバを用意し、スケーリングを考慮してRedisのPub/Subを使ったり、コネクションが切れたら再接続処理を入れたりと考慮すべきことがものすごく多くなります。
Firestoreであればチャット機能は数分あれば作ることができます。さらにブラウザとスマホの両方から簡単に扱うことができます。
>>Cloud Firestoreでリアルタイムチャットを開発する
冗長構成でデータベースの管理コストがいらない
MySQLなどを自前で運用するとスペックの選定からマスタ・スレーブ構成を構築して、常にDBサーバのメトリクスを監視する必要があります。
Firestoreはマネージドサーバで管理されていて、複数リージョンにデータが複製されているため冗長構成を管理する必要がありません。
負荷に関しては世界規模のサービスに耐えるスケーリング性能を持っていると公式ドキュメントに書かれています。
世界でも最大規模のアプリからの最も過酷なワークロードに対応できるように設計
Cloud Functions for Firebaseとの連携が強力
FirestoreとFunctionsの連携はものすごく強力ですね。トリガーで発火したFunctionsは複数回呼ばれる可能性があるので冪等性を考慮して実装する必要はありますがデメリットとまでは行かないです。
FirestoreのバックアップもFunctions経由できますし、サーバを全く必要とせずにグローバルレベルにスケールするサービスを構築することができます。
Cloud Firestoreのデメリット
クエリが弱い
高機能なクエリ処理とありますが、現状はかなり弱いと言わざるを得ないですね。
例えばここら辺ですね。
- ノットイコールなクエリはできない
- 最近まではサブコレクションにクエリをかけられなかった
- Like検索がない。Like検索っぽいことはできるみたいですが。詳細はこちら。
- or検索ができない
今後改善されていくと思うので期待は大ですが。
更新が多いサービスはきつそう
ゲームのように自分以外のデータを複数人で更新するようなサービスには適していないように思います。データベース設計でどうにかできるかもしれないですが、複雑になりそうです。
ドキュメントに対する時間当たりの書き込み数も制限されていることも更新が多いサービスには不向きかと思います。
まとめ
基本的にFirestoreはいいことだらけなので個人開発レベルであれば考慮する必要もなくFirestoreでいいですね。めちゃくちゃでかいサービス、複雑なDB設計を必要とするものだけ検討すればいいかと思います。
まだまだ内容が少ないので随時書き足して行きます。本日は以上です。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す