2016-04-07 20 views
0

Firebase DBでいくつかの操作を実行し、ユーザーがモバイルデバイスから特定の入力を与えた後でデータを操作する必要があります。何千ものon()イベントリスナーを持つFirebase

現在、私たちはon()を使用して、各ユーザーノードの特定のフラグをリッスンしています。私たちはHerukuでホストされているNodejsサーバーからこのリスナーを実行しています。

10万人のユーザーを予定している場合、リスナーは10万人になります。モバイルデバイス上でユーザーによって操作されるのを待っている各ユーザーフラグの1つのリスナー。

これはFirebaseに関して優れた設計ですか?

理想的には、ユーザーによって呼び出されたREST APIを作成し、Node JSサーバーでデータを操作できます。

ユーザ入力に基づいてFirebaseのデータでバックグラウンド操作を実行する最も良い方法は何ですか?

Parse Cloudコードを使用してこれを達成するのは簡単でした。 Firebaseではこれにより問題が発生しています。

+0

広い質問です。分割して、ここに開発者の質問をし、多分概念的な質問のためにhttp://programmers.stackexchange.com/を試してみてください。 –

答えて

2

10万人のユーザーを予定している場合、リスナーは10万人になります。モバイルデバイス上でユーザーによって操作されるのを待っている各ユーザーフラグの1つのリスナー。

これは悪いデータデザインのようです。何十万ものアイテムの変更を聞くことは間違いありませんが、何十万人ものリスナーは必要ありません。

users 
    $uid 
    name: "user6155746" 
    flag: "no" 

そして、あなたは、各ユーザーのちょうどflagにリスナーを添付している:

私の推測では、(あなたがJSONのスニペットが含まれていなかったので)あなたはこれに類似した構造を有することです

ref.child('users').on('child_added', function(userSnapshot) { 
    userSnapshot.ref().child('flag').on('value', function(flagSnapshot) { 
    console.log('the flag changed to '+flagSnapshot.val()); 
    }); 
}) 

コードでこれは簡単ですが、実際には "フラグリスナー"を管理するのは難しいでしょう。いつそれらを削除しますか?あなたはそれらのリストを保持していますか?あなたはJSONツリー内で興味を持っている情報隔離場合

これらの事のすべてがシンプルなリストになる:

users 
    $uid 
    name: "user6155746" 
userFlags 
    $uid: "no" 

を今、あなただけの任意のユーザのフラグかどうかを確認するためにuserFlagsに聞くことができます変更されました:

ref.child('userFlags').on('child_changed', function(userSnapshot) { 
    console.log('Flag of user '+userSnapshot.key()+' changed to '+userSnapshot.val()); 
}); 

これにより、数十万人の潜在的なユーザーの旗を監視する1つのリスナーがあります。

関連する問題