2016-06-15 4 views
3

私はfirebaseテーブルに数千のエントリーを持つアプリを持っています。 誰かがこのテーブルに接続しているので、これらのアイテムを数えて合計する必要があります。ファイヤーベースデータを効率的にまとめよう

-itemlist 
| 
--1 
    |-x:2 
--2 
    |-x:4 

などとなる。ユーザーはいつでも接続できます(前にこの表を見たことがないことを意味します)。また、別のユーザーがいつでも値を変更したり、値を追加することができます。

ValueEventListenerを「itemlist」に追加しようとすると、新しいデータがなくても1000のエントリを持つ新しいデータベースに接続すると、リスナーはこれらの1000のエントリをすべて呼び出すと機能します。

私はonChildlistenerで試してみましたが、これは最初に余分なアイテムごとに追加されたChildItemを呼び出します。 これは時々2分以上かかります。

データベース全体を一度取得し、それを計算してから変更をリッスンする方法はありますか?

答えて

5

Firebaseデータベースには、本質的にはデータベースのスケーラビリティとリアルタイム性が犠牲になるため、サーバ側集計演算子はありません。集計を計算するために2つのオプションであなたを残し

:あなたはすでにあなたがすべての変更で更新実行中の集計を維持

  • を示唆したよう

    1. それらをクライアント側を実行する

    クライアントがすでにデータを表示する必要がある場合は、集約クライアント側の実行が適しています。たとえば、特定のチャットルームにユーザーリストを表示している場合、同じデータからクライアント側のユーザー数を簡単に数えることができます。

    しかし、クライアント側のデータが必要ない場合は、データをダウンロードするだけで無駄です。アプリのスケーラビリティが損なわれます。そのような場合、オプションは、集約を保持する余分なノードを保持し、関連するすべての書き込み操作でノードを更新することです。たとえば、アプリに登録したユーザーの数を表示する場合は、ユーザーが登録/登録解除するたびに更新するグローバル/user_countを保持することができます。このアップデートでは、通常、transactionを使用します。

  • +0

    ローカルにデータが必要なので、すべてをロードしようとしています。変更を追跡するだけなので、誰かがアプリを起動するとすぐにそれはOKです。初めての場合はパフォーマンス上の大きな問題です。 – alltooconfusingthereforesleep