2017-12-20 31 views
0

ファイアストアのベストプラクティス、チャットアプリケーションを開発するとき、チャットルームのメッセージを保存するベストプラクティスは何かを質問したいと思います。firestore:配列とドキュメントのサブコレクションのパフォーマンス

ここでは、すべてのチャットルームに独自のドキュメントがあることを前提としています。

ユーザーからのメッセージを格納するために配列を使い始めました。このアプローチの問題は、新しいメッセージがチャットルームに送信されるたびに、新しいエントリを挿入(追加)する方法がないことです。新しいメッセージが追加されたアレイの新しいコピーを保存する必要があります。チャット履歴がサブアレイなどに分割されていない限り、これは実際に悪いと思われるものです。

公式の文書では、特定のチャットルームのメッセージを別々のドキュメントそのチャットルームのサブコレクションで私はこのアプローチが最高かどうか、何が欠点か、これを行うための別の好ましい方法があるのだろうかと思います。

+0

チャットルームのすべてのメッセージを1つのドキュメントに保存すると、許可されている1MBを超えるサイズのドキュメントにすぐにつながります。配列の使用は、[このブログの投稿](https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html)で説明されているように、マルチユーザー環境では悪い考えです。チャットメッセージごとに別々のドキュメントを使用するのが最も簡単です。ドキュメンテーションがあなたをその方向に導くことを考えれば、なぜ別のアプローチが優れていると思いますか? –

+0

いいえあなたは正しいです、私はちょうどnosqlデータベースの経験がありませんし、私は多くのものを見つける少しconter直感的なmysqlの背景から来て –

答えて

0

私は一般的に「すべてのチャットルームにはメッセージのサブコレクションがあり、新しいメッセージはすべてこのサブコレクション内の別のドキュメントです」というアプローチになります。これにはいくつかの利点があります:個々のメッセージの追加や編集が簡単で、さまざまなクエリを実行することができます(「最新のメッセージ20個」など)

最大の欠点は、新規ユーザーは頻繁にチャットに参加する予定であり、参加するまで部屋のチャット履歴全体を確認したい場合、データベースの読み込み回数が多くなります。現実的には、現実の生活の中でどれくらい頻繁に起こるか分かりません。ページ分割を使用して履歴チャットをバッチで取り込むことでこれを軽減できます。

関連する問題