質問: Firestoreを使って、"1対1"ではなく、"1対多(1 : N)"のslackの様なグループチャットシステムを作ろうとしています。 ただ、firestoreのchatコレクションのdocumentの構造が ``` chatId: "チャットのId" message: "チャットの投稿テキスト" senderId: "投稿した人のID" ``` だとすると、 一テキストごとに、毎度毎度、ユーザーの変更する可能性のあるユーザーの名前やimageを取得するクエリーを投げなければならず、 負荷的に正しいチョイスなのか懸念しています。 Relationalなデーターベースだと、クエリーが強く、 データーベースをジョインすれば、一回のクエリーでチャットメッセージとそのユーザーの詳細情報も取ってこれると思うので、 GCPで言うと、cloud sqlの様な物を使って、グループチャットを作った方が良いのでしょうか。 SNSみたいなアプリを作ろうとした時に、ユーザーのフォローワーを取得する時にも同じことが言えるので、 firestoreの利用は、基本的に変更のなく、他のテーブルと関係性のないデータを扱うのがベストなのかもしれないと思い始めてきました。 フロントでJoinすることも考えられますが、大規模なシステムの場合を想定しているので、大丈夫そうか懸念です。 Slackの様に高速なグループチャットの機能を実現したいです。 DBにFirestoreかSQLのどちらを採用すべきかを中心にアドバイスよろしくお願いいたします。
回答: 私としてはRDBを使うのが無難と思います。 確かにfirestoreを使えばリアルタイム処理など簡単ですが、 その設計ノウハウはまだ枯れているとは言えず、人によってかなり変わるし正解がないという印象です。 趣味開発なら気軽に使えるんですが、業務のメインのデータベースとして使うのはまだ怖いというか。 下記の MongoDBの様なNoSQLに勢いがあるのは何故ですか?SQLと比べてどんな利点や欠点がありますか? > > 80%以上のユースケースでは、いまだSQLにまさるものはないでしょう。 > > > と同じ見解です。 RDBを主軸として部分的にNoSQLを使うというのは全然有りだと思います。