-1

以下に示す日付モデルを考えると、ユーザーがログインしてデータを取得した後、友人のリストも取得できます。

ただし、idfdb17f3a-7b7d-4aa5-9a0b-b9fb33c349deと でこれら 2 人の友人の詳細を取得するにa96da7b1-7c4e-44bc-b82e-fc75bed52bcdは、現時点で最も効率的な操作は、次のように URL を単純にループすることのようです。

for singleFriendID in allFriendIds

    firebase.com/[my_db_name]/users/{singleFriendID} 

end

しかし、それでも大きな制限があります.40人の友人のユーザー名のリストが必要だとすると、サーバーへの40の個別の特定の呼び出しが必要になります...

すべての友人の詳細を携帯電話にダンプするのではなく、Firebase 内でデータを効率的に検索するにはどうすればよいですか?

Firebase スキーマ:

{  
   "users":{  
      "99e4989b-a046-4c5f-9478-5ebd8bdc3ded":{  
         "email":"person@gmail.com",
         "friends":{  
            "fdb17f3a-7b7d-4aa5-9a0b-b9fb33c349de":{  
               "confirmed":true,
               "selfSendRequest":false,
               "timeInvited":"2016-02-21 08:49:31"
            },
            "a96da7b1-7c4e-44bc-b82e-fc75bed52bcd":{  
               "confirmed":true,
               "seldSendRequest":false,
               "timeInvited":"2016-02-21 08:49:31"
            }
         },
         "password":"aPassword",
         "phoneNumber":"16144444444",
         "username":"person2"
      }
      "a96da7b1-7c4e-44bc-b82e-fc75bed52bcd": {
      ...
      ...
   }
}
4

2 に答える 2

3

Loolooii のアプローチは、呼び出しの数を節約し、間違いなく有効なアプローチです。

しかし、Firebase データベースへの 40 回の呼び出しが多いという仮定も立てています。これを測定してみると、おそらく驚かれることでしょう。

従来のデータベースでは、呼び出しごとにデータベースへの往復を行います。

client                   server
    --- give me item 1 --->
                             loading
                             item 1
    <-- here is item 1 ----
    --- give me item 2 --->
                             loading
                             item 2
    <-- here is item 2 ----
    --- give me item 3 --->
                             loading
                             item 3
    <-- here is item 3 ----
    --- give me item 4 --->
                             loading
                             item 4
    <-- here is item 4 ----

Firebase はすべてのリクエストをパイプライン処理します。したがって、基本的に、クライアントはすぐにすべてのアイテムのリクエストをすばやく連続して送信します。

client                   server
    --- give me item 1 --->
    --- give me item 2 --->
    --- give me item 3 --->
    --- give me item 4 --->
                             loading
                             item 1
                             loading
                             item 2
                             loading
                             item 3
                             loading
                             item 4
    <-- here is item 1 ----
    <-- here is item 2 ----
    <-- here is item 3 ----
    <-- here is item 4 ----

1 ラウンドトリップとアイテムのロード時間だけを待つだけなので、これははるかに高速であることがわかります。その最後のビットが懸念される場合は、Loolooii のアプローチを採用してください。

于 2016-02-22T16:27:23.343 に答える
1

データベースに対して 40 回の呼び出しを行う必要はありません。ユーザーごとに友達のリストを保持するだけです (各オブジェクトには、必要なすべてのユーザー情報が含まれています)。

/users/:id:/friends

友達のリストが必要な場合は、次のようにします。

/users/:myId:/friends

これにより、ループできるリストが(1回の呼び出しで!)表示されます。そのため、特定のユーザー エンドポイントごとに個別の呼び出しを行う必要はありません。

パフォーマンスを向上させるために、データベースに重複データがあっても問題ありません。

更新(コメントに回答するため):

ユーザーの友人や、たとえば写真を気に入った人のリストを表示するには、通常、ID と名前を保存するだけで十分です。詳細を表示するには、その特定のユーザーのプロファイルをクリック イベントで表示できます。

于 2016-02-22T16:18:51.777 に答える