2016-11-18 76 views
1

我嘗試在Firebase中創建世界模型的人。這意味着地方我需要把500分miljon +的記錄,像這樣火力地堡JSON:如何在Firebase中搜索這個龐大的用戶列表

 "USER" : { 
     "HnhLyXRxUINmlltKOfxx2QBYiQ53" : { // FireBase user ids 
      "FRIENDLYS" : { 
      "-KWrFrMx1yQe0jhyA7HP" : { // Push ids 
       "animal" : "dog" 
      }, 
      "-KWrG7EsLkZvASjpcW3A" : { 
       "animal" : "cat" 
      }, 
      "-KWrG9hbQxrZwdfjqbuQ" : { 
       "animal" : "horse" 
      } 
      }, 
      "email" : "[email protected]", 
      "lastName" : "Doe", 
      "firstName" : "John", 
      "googleId" : "10086464927329323e2326" 
     }, 
     "HnhLyXHKJH67677GJKMnbBYiQ53" : { // FireBase user ids 
      "FRIENDLYS" : { 
      "-KWrFrMdjnjs982s7HP" : { // Push ids 
       "animal" : "ant" 
      .... 

     } 

我想尋找一個USER這樣的:

firebase.child("USER/HnhLyXRxUINmlltKOfxx2QBYiQ53").addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

的問題是,如果這是一個好方法繼續建設,特別是像我這樣搜索時,有一個「USER」對象這麼大可行嗎?

我可以期待什麼?

回答

2

您的代碼不是正在爲用戶搜索。您正在構建對子節點的直接引用,該操作本身沒有任何性能影響。直接查找密鑰始終很快,因此用戶數量不會對應用程序產生負面影響。

但是,將「FRIENDLYS」[原文]存儲在用戶下不會縮放。加載單個用戶節點的速度會隨着每個額外的孩子放在那裏而變慢。您應該將它們分別存儲在不同的根節點下,只有在實際需要時才加載它們。

另請參閱實時數據庫指南的Structure Your Data部分。