次のチャットアプリのfirebaseガイドstructuring dataへ。彼らは以下のような構造を示唆している。私は簡単に、彼らはの一部であるチャットのすべてのリストを表示し、それらの一つ一つのために最後のメッセージとタイムスタンプを表示することができるようにFirebaseのチャットアプリのデータ構造
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// converation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
は、どのように私は自分のユーザーデータを構造化します。私は次の構造を行う場合は、次の
ref.child("users").child("ghopper").child("chats").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
//do something with data
}
私が勝っしかし:
"users": {
"ghopper": {
"name": "Gary Hopper",
"chats": {
"one: true",
"two": true
}
},
"alovelace" { ... }
},
を私は簡単に(迅速に)行うことにより、例えばghopperのために、特定のユーザーのための各チャットグループのリストを取得することができますこのスナップショットにはlastMessageとtimestampがありません。このデータにアクセスするには何が必要ですか?
- 各ユーザーのすべてのデータを複製しますか?つまり、ユーザー/ゴッファー/チャット/ one/{"lastMessage": "ゴーファー:リレーの不具合が見つかりました"原因:moth "、"タイムスタンプ ":1459361875666}
- チャットごとに" chats/specificGroupId "ユーザーは(複数のリスナーを追加する)の一部ですか?
- 他の方法はありますか?あなたはユーザがすべてのチャット、あなたが行うことができますのリストを持っているブロックで
あなたはその変数を使用していないので、lastMesssage = snapshotの機能は何ですか?また、ブロック内でself.variableの名前を使用することをお勧めします(クロージャ)。また、最初のref.child内のref.childは重複しているため、同じデータを読み込みます。最大の問題は、Firebaseが非同期であり、ループのタイトループがobserveブロック内でデータが返されるよりも速く* way *実行されるため、データの整合性に問題があると思われます。Firebaseには「もの」は非同期である。 – Jay
答え内の質問に答えるには....いいえ、uid_2:存在しないかのようにfalseは必要ありません。デフォルトではfalse(コード化されている)になる可能性があります。そして、いいえ、データベースは指数関数的に増加しません。 10人のユーザーと1人のチャットをお持ちの場合、10人のユーザー全員がそのチャットに参加しているため、1000人のユーザーと100人のチャットがあれば、2人のユーザーとチャットするそれでも、それぞれ100人のチャットがあり、それぞれに2人のユーザーを持つユーザーノードがあります。 1000人のユーザーと1000のチャットでも、それは相当量のデータではありません。 – Jay