2016-06-15 45 views
3

我有一個應用程序,我有一個火力點表中的幾千個條目。 現在有人連接到這張桌子上,我需要統計和總結這些項目。有效地累加火力基數據

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

等等。用戶可以隨時進行連接(也就是說,他以前從未看到過此表),而另一個用戶可以在任何給定時間更改某個值或添加值。

現在,如果我嘗試添加ValueEventListener爲「ITEMLIST」它的工作原理,如果沒有新的數據,但只要我連接到一個新的數據庫擁有1000項左右的聽衆對這些1000個條目中的每一個來電。

我嘗試過使用onChildlistener,但這次調用了第一次爲每個項目添加的ChildItem。 有時需要2分鐘。

有沒有辦法讓整個數據庫一次,計算一下,然後只聽取更改?

回答

5

Firebase數據庫沒有服務器端的聚合操作符,因爲它們固有地與數據庫的可伸縮性和實時特性不一致。

這使得你有兩個選項來計算聚集:

  1. 執行這些客戶端,你已經建議

  2. 保持你與每一個變化更新運行聚合

如果客戶端已經需要顯示數據,那麼執行聚合客戶端是一個不錯的選擇。例如:如果您顯示的是特定聊天室中的用戶列表,則可以輕鬆地從相同數據中統計客戶端的用戶數量。

但是,如果你不需要數據客戶端,那麼只需下載它來聚合它是很浪費的,並且會傷害你的應用程序的可伸縮性。在這種情況下,一個選項是保留一個額外的節點來保持聚合,並用每個相關的寫入操作對其進行更新。例如:如果您想要顯示有多少用戶在您的應用中註冊過,那麼您可以保留一個全球/user_count,只要用戶註冊/取消註冊,您就可以更新。對於此次更新,您通常會使用transaction

+0

我需要本地數據,所以我嘗試加載所有內容。只要有人在應用程序正常之前啓動應用程序,因爲我只跟蹤更改。只有第一次是一個巨大的性能問題。 – alltooconfusingthereforesleep