2017-04-07 36 views
-1

私は次のような構造をしており、写真のリストとその著者の写真と名前を表示するクエリを実行したいとします。これを構造化してクエリする最良の方法は何ですか?ファイアベースの効率的なデータ構造化?

私は、各写真の下にデータ(user.nameとuser.photoUrl)を複製したくありません。一方、私は写真のクエリに完全なユーザーを含めるか、ids(基本的にはINステートメント)のリストに基づいてユーザーのリストを取得するというクリーンな方法はないと思いますか?

users 
    user1 
     name: "A" 
     photoUrl: "LINK" 
    user2 
     name: "B" 
     photoUrl: "LINK" 

photos 
    photo1 
     author: user1 
     photoUrl: "Link" 
     likesCount: 120 

答えて

0

NoSQLシステムでのデータ複製は非常に一般的です - ディスク容量は安いです。しかし、正しく実行されないと、問題を複雑にしたり、コーナーにコード化したりする可能性があります。データセットを更新するには、データベースを複数回更新する必要があります。

解決のためのいくつかのオプションが

1) Duplicate Data 
2) Nest queries 
3) Simplify 

1である)データを複製:これはかなり明白であり、あなたの質問に言及し、各写真にユーザー情報を追加します。このソリューションは、しばしば時代遅れになるので避けてください。

2)ネストクエリー:すべての写真ノードを配列に読み込んだ後、配列全体を繰り返し、各著者を読み込みます。これも一般的ですが、Firebaseの非同期性を考慮し、関数の終了が完了するまではデータを操作しないようにする必要があります。

3)構造を単純化する:あなたの例から、1対多の関係があるように見えます。

各著者/ユーザには複数の写真があるので、写真のデータを作成者に保存するのは簡単です。

user_0 
    name: "A" 
    photos 
    photo_0 
     url: "asdasd" 
     likes: 123 
    photo_1 
     url: "fghfhf" 
     likes: 42 
user_1 
    name: "B" 
    photos 
    photo_0 
     url: "qqqqqq" 
     likes: 12 
    photo_1 
     url: "wwww" 
     likes: 16 

私はすべてに約Denormalizing data午前 - 平坦が良いです。しかし、すべてがユースケースに依存するため、要件ではなく、この状況では、質問内のデータに基づいて、シンプル化がおそらく最良のソリューションになります。

関連する問題