4

私はAndroidアプリケーションでFirebaseデータベースを使用しています。通常、正常に動作します。しかし、データベースが大きくなると、クエリのパフォーマンスは悪化しています。データベース( "elk"と "su"ノードの下)に約5kレコードを追加した後、データベース( "cut"と "user"ノード)を照会しましたが、すべてのクエリは非常に遅いです。データベースのルールにデータインデックスを定義しましたが、機能しませんでした。どのようにして問題を解決できますか?ここで大きなデータセットを持つ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ツリーの画像を質問に含めました。 Firebaseデータベースコンソールの[エクスポート]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

+0

何か遅い場合は、ほぼ例外なく、ネットワーク帯域幅の機能とダウンロードしているデータの機能です。私はすぐには異常に大きいと思われるものは見当たりませんし、あなたのインデックスはクエリに対して正しいように見えます。 jsfiddle/jsbinで問題を再現できる場合は、それを試して、あなたのパフォーマンスとあなたのパフォーマンスとの比較を見てみましょう。 –

答えて

2

あなたが行うための最善のことを引き続き拡大したい場合は、それは知っているゾーンの参照でデータを複製することですelk/suはその一部です。

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

あなたはあなただけだろう、すべてを検索したいその方法:直接

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

し、それらをループ各ヘラジカを取りに行くために/ suを

+0

実際、「elk」と「su」ノードに新しいレコードを追加するだけで、展開を続けたくありません。 – cimenmus

+0

そう、それらを拡大してください。それにかかわらず、あなたはこのようにして、それが速くなるようにしなければなりません。注文はありませんこの方法論を使用しており、非常に高速です。 –

+0

私はあなたに言います。しかし、私は何かを理解していませんでした:私は、 "ユーザー"ノードが "カット"ノードの下にあり、2人のユーザーしかないが、そのクエリが非常に遅い、ゾーンを取得するために "orderBy"クエリを使用しない。その理由は何ですか? – cimenmus

関連する問題