4

我在Android應用上使用Firebase數據庫。通常情況下,它工作正常。但是當數據庫越來越大時,查詢性能越來越差。我在數據庫(在「elk」和「su」節點下)添加了約5k的記錄,然後在數據庫上查詢(在「剪切」和「用戶」節點上),但所有查詢都非常慢。我在數據庫規則上定義了數據索引,但它不起作用。我該如何解決這個問題?在大型數據集上查詢Firebase數據庫非常慢

這裏是我的查詢:

// query to get the zones followed by user 
FirebaseDatabase.getInstance() 
       .getReference() 
       .child("user") 
       .child(userID) 
       .child("zones"); 

// query to get cuts on a zone 
FirebaseDatabase.getInstance() 
       .getReference() 
       .child("cut") 
       .child(cutType) 
       .orderByChild("zoneID") 
       .equalTo(zoneID); 

my database structure

database rules

+2

當你說非常非常緩慢。你的意思是多慢?你有任何測試結果或什麼?我們如何知道網絡是否正常,或者手機運行良好,應該有更具體的問題證據,直到此時我們只能假設並指責火力點本身的功能緩慢。請嘗試使用最小,中等,大型數據庫等生成更具體的測試結果。同時牢記網絡強度,手機緩存性能等各種因素。 –

+0

您在問題中包含了JSON樹的圖片。請用實際的JSON替換爲文本,您可以通過點擊Firebase數據庫控制檯中的導出按鈕輕鬆獲取。將JSON作爲文本可以搜索,使我們能夠輕鬆使用它來測試您的實際數據,並將其用於我們的答案中,並且通常只是一件好事。 –

+0

如果速度緩慢,它幾乎毫無例外地是網絡帶寬與您正在下載的數據的函數。我不會立即看到任何看起來非常大的東西,並且您的索引看起來是正確的。如果您可以在jsfiddle/jsbin中重現問題,我們可以嘗試一下,看看我們的表現與您的表現相比如何。 –

回答

2

如果你想繼續擴大的最好的辦法是複製的區參考的數據,其中就知道麋鹿/蘇是它的一部分。事情是這樣的:

{ 
    zones: { 
     elk: { 
      "istan-besik": {     
       "-KSp)bL5....": true, 
       ...: true 
      } 
     } 
    } 
} 

當你想搜索所有這樣,你只想做:通過這些

...child('zones').child(zoneId).child(cutType) 

然後循環去獲取每個麋鹿/蘇直接

+0

事實上,我不想繼續擴展,只需向「elk」和「su」節點添加新記錄即可。 – cimenmus

+0

所以是擴大這些。無論你如何開始這樣做,以便它保持快速。沒有orderBy使用這種方法,它會非常快。 –

+0

我會做你說的。但我不明白:我不使用「orderBy」查詢來獲取用戶所在的區域,而「user」節點不在「cut」節點下,並且只有2個用戶,但該查詢速度也很慢。這是什麼原因? – cimenmus