質問: Google App Engine と Cloud Firestore を併用したいのですが、現時点では、併用する場合、リージョンが、 `us-central` しか選択できません。 日本からの利用だと、おそらく東京リージョン時と比べて、ある一定のレイテンシが発生するだろうと思っています。 レイテンシを回避するために、Realtime Datbase を利用する手段もあると思うのですが、Cloud Firestore の方がクエリも使いやすく、一概には言えないと思いますが、よりモダンであると考えています。 そこで、このリージョンのレイテンシによるデメリットか、Cloud Firestore を選択するメリットどちらがより重要だと考えられるか、ということをお聞きしたいです。
回答: レイテンシについて超シビアなアプリケーションを作るわけではないのであれば、Firestoreを利用したほうが良いと思います。 私もそのようなスタイルでアプリケーションを作っていますが、レイテンシについてはあまり気になっていません。 ReltimeDatabaseは使ったことはないですが、Firestoreのほうがクエリが使いやすそう、という理由で私もFirestoreを選択しました。 @touyu さんもおっしゃる通りFirestoreのほうがモダンであると思ったのも選択した理由です。 私が選択したときはまだFirestoreはbeta版でしたが、Firestoreをリリースしているということは、RealtimeDatabaseでは解決できなかった問題があるんだろう、というくらいの程度ですが...。 おそらくレイテンシについて気になっているということは、あるデータのIDから子データを取得して、子データから孫データを取って、ということを考えているのではないかと思います。 その場合は、逐次的に発生するリクエストの重なりで結局すべてのデータが出そろうまで時間がかかってしまう、ということはあると思います。しかし、Firestoreではそのようなリレーショナルなデータの格納は行わずに、データの正規化が行われない状態でデータを保持させておきます。そのため、IDから子データを取って、孫データを取って、ということは発生させないので、逐次的なリクエストを発生させない限りは レイテンシ、というか、データがそろうのが遅いという問題は回避できると思います。 ただ、私もすべてのデータを正規化させない状態で保持しているわけではなく、描画が遅れてもよいデータはリレーショナルな構造にしています。 そこらへんはFirestoreでは柔軟に自分で決められるので、非正規化によるパフォーマンス向上と正規化によるデータの管理のしやすさのトレードオフとなる部分を自分で調整することができるのも、Firestoreを選択する利点だと思います。