2017-01-04 18 views
0

"Instagram-like"アプリを例にしてみましょう。Firebaseデータベースのデータ集約

フィードには、ユーザーのアバターと名前が上部に表示され、写真やビデオが下部に表示され、最後のコメント、お気に入り数、投稿時間が下部に表示されます。

基本的に、私は

{ username: "John", avatar:"some_link", photo:"photo_url", likes:"9", time:"182937428", comments:[comments there] }

が、Firebaseを使用してのようなバックエンド何かから取得するために待っているクライアントで、私はよりフラットな方法でデータを保存する必要があります。データJSONには「ユーザー」、「投稿」、「コメント」が表示されます。

これらのノードからのデータを、クライアントで使用するのに簡単な一種の単一オブジェクトに集約する方法はありますか?

また、3つの「要求」がすべて完了した後で、その中のすべてのユーザおよびそのコメントに対してFirebaseに投稿を依頼する必要がありますか?

答えて

1

「浅い」ツリー構造を実装し、必要に応じて参照を使用する必要があります。 これは、アプリ内のほとんどの場合、そのオブジェクトを「重要なデータ」(「チャットタイトル」の下の例で)と「さらなる情報」のキー(inこの例では、「メンバー」へのキー)。 firebaseドキュメント(https://firebase.google.com/docs/database/web/structure-data)から

悪い

{ 
    // 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 
    // conversation ID 
    "messages": { 
    "one": { 
     "m1": { 
     "name": "eclarke", 
     "message": "The relay seems to be malfunctioning.", 
     "timestamp": 1459361875337 
     }, 
     "m2": { ... }, 
     "m3": { ... } 
    }, 
    "two": { ... }, 
    "three": { ... } 
    } 
} 
+0

{ // This is a poorly nested data architecture, because iterating the children // of the "chats" node to get a list of conversation titles requires // potentially downloading hundreds of megabytes of messages "chats": { "one": { "title": "Historical Tech Pioneers", "messages": { "m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." }, "m2": { ... }, // a very long list of messages } }, "two": { ... } } } 

良い私はまだそれを得るいけません。だから私は "アバター"、 "名前"、 "年齢" "ユーザー"を得た場合。私は "url"、 "count"、 "userId"で "post"を取得しました。一緒にそれを得る方法?手動で各「投稿」ごとにfor-eachを作成し、クライアント上の実現に「user.avatar」と「user.name」を追加しますか?そして、もし何千もの投稿があったら?または、私はユーザーから投稿するデータを複製する必要がありますか?ユーザーが名前やアバターを変更した場合はどうなりますか? – Graykos

+0

申し訳ありませんが、私は次のようなものではありません...あなたは "それを一緒に"という意味ですか? – idosh

関連する問題