2016-09-23 4 views
1

私が説明する戦略は、Firebaseで使用することをお勧めしますか?Firebaseでこのようなクエリを実行すると、どのようなパフォーマンスが期待できますか?

多くの人がすでに同じ問題を解決していると確信していますので、私の目標は何かをまず説明します。

目標は、共通の "George"(連絡先に基づいて)の友だちが今やAppの誇りある新しいユーザーになったときに、Appのすべてのユーザーに通知することです。

だから、私の考えはそうでした:ユーザーごとに連絡先のリストを保存するには

{ 
    "contacts": 
    { 
     "user1": 
     { 
     {"user239":true} 
     , 
     {"user23":false} 
     , 
     {"user732":true} 
     } 
     , 
     { 
     "user2" : 
     { 
     {"user23":false} 
     , 
     {"user96":false} 
     , 
     {"user88":true} 
     } 
    } 
    } 
} 

1-この構造のコレクションを構築します。

次に、新しいユーザーは、このような連絡先のリストを照会します:

fbRef.child('contacts').orderByChild('user23').equalTo(false).once('value', showResults, console.error); 

次に、ユーザはそのマップを使用して、マップに結果を保存trueに値を変更し、updateChildren()でしょう。

ここで、数十万人、さらには何百万人ものユーザーがAppを使用することを願っているとしたら、これは妥当ですか?

5Mのユーザーがいて2番目のユーザーが参加すると、これはどれくらいの費用がかかりますか?

このケースでは「最適な戦略」がありますか?

おかげ

+4

この単純にしてください。各ユーザには、連絡先情報の名前(電子メール、電話番号など)を含む連絡先ノードがあります。各ユーザーのアプリは、すべてのユーザーを含むメインユーザーノードにオブザーバーを追加します。 Georgeがサインアップすると、彼の情報はメインユーザーノードに書き込まれ、各ユーザーにこの新しいユーザーが通知されます。その名前(電子メール、電話番号)を連絡先のリストと比較し、一致する場合は連絡先リストにGeorgeのユーザーIDを追加します。難しい部分は、それが正しいジョージであることを知るために十分細かい使用するトリガーを決定することです。何千人もの観察者は問題ありません。 – Jay

+2

+1に@ジェイ、私はそれが正しい答えだと思います。ところで、あなたは5Mのユーザーを何も持っていないでしょうし、もしあなたがそうしていても、それはfirebase価格で非営利になります。私見では –

答えて

0

リアルタイムFirebase関数のみに適していますが、大規模なデータセットのために設計されていません。リアルタイムで記録ストリームがこれには完璧であるという事実。

パフォーマンスは、大規模なデータアプリケーションと同様、実装と同じです。そこで、大規模なデータセットに留意するためのいくつかの欠点があります。

だから何をすることができます非正規化データです。

**/users/uid 
/users/uid/profile 
/users/uid/chat_messages 
/users/uid/groups 
/users/uid/audit_record** 


**/user_profiles/uid 
/user_chat_messages/uid 
/user_groups/uid 
/user_audit_records/uid** 

第2のアプローチは、第1のアプローチがはっきりと見える大きなデータセットを反復するのに適しています。

大きいデータセットでvalueを呼び出さないでください。child_used によって呼び出します。これは、上記のデータを非正規化するのに役立ちます。

firebaseは大量のデータを処理できることを覚えていますが、それはあなたが従う方法に依存します。

例:「last_logins」を任意のユーザーに保存する場合は、特定のオブジェクトインスタンスの下に直接格納することができます。特定のユーザーの「last_logins」にアクセスしたい場合、アクセスの容易さを提供します。

維持多く関係我々はすでに我々がグループで巣のユーザーは、それが多くの関係に多くを表していないだろうことはできないとして、冗長データを残すことを見てきました

に多くの。ユーザーが所属するグループのキーのみを含む特定のグループのインデックスを作成することができます。これにより、ユーザーが所属するグループのリストを簡単に取得できます。ここで多くの関係または静的リストに一つ

を保存

はfirebase設計に使用されなければならないのベストプラクティスの一部へのリンクです。

Performance

Indexing

関連する問題