2017-09-13 10 views
0

私はFirebaseに大きなデータベースを持っています。私の意見では、構造化が間違っている。 参照のスナップショットを取得しようとしていますが、処理に時間がかかりすぎます。 しかし、私はすべてのデータを取得する必要はありません。私はディープアイテムを必要としませんが、私はどのように表面を得ることができるのか分かりません。大きなFirebaseデータベースの表面的なデータを取得する

clients { 
    1234 { 
     name: 'Paul', 
     last_name: 'Mcartney', 
     city: 'Liverpool', 
     account_movements: { 
      item1: { 
       ... 
      } 
     } 
    } 
    1234 { ... } 
    1236 { ... } 
} 

はのは、私は必要なものは、彼のaccount_movementsを除くすべてのclientesデータであることをsuposeしてみましょう:

ので、構造は、このようなものです。

+1

Firebaseからデータを読み込むと、常に完全なノードが取得されます。各ノードのプロパティのサブセットを取得する方法も、キーを取得する方法もありません。また、https://stackoverflow.com/questions/37365866/firebase-2016-shallow-query –

+1

を参照してください。この要件は通常、データをさらに非正規化する必要があることを意味します。たとえば、おそらく 'account_movements'を各クライアントの下から自分のトップレベルノードに取り除くべきでしょう。 –

答えて

1

あなたは大きなデータベースについて話しているので、私は少しあなたのデータベースを再構築することをお勧めします。 Frankが言っているように、ノードを読み込もうとすると、ノード全体が取得されます。つまり、特定の参照にリスナーを追加するたびに、そのオブジェクトの情報全体がダウンロードされます。各ノードのプロパティのサブセットのみをダウンロードできる方法はないので、データベースがdenormalizeである必要があります。 Firebaseの重要なルールは、データベースをできるだけフラットにすることだから、各ユーザからaccount_movementsを取り出し、トップレベルのノードとして別々に追加することをお勧めします。よりよく理解するために、私はあなたがこの投稿、Structuring your Firebase Data correctly for a Complex Appを読んで、このチュートリアルDenormalization is normal with the Firebase Databaseを見ることをお勧めします。

希望します。

+0

あなたの情報をお寄せいただきありがとうございます@Alex_Mamo。私は、非正規化が唯一の解決策であると思った。あなたの答えはそれを確認するために終わった。 –

0

新しいノード「account_movements」を独自のIDで作成してユーザーに追加することも、ユーザーの詳細がないユーザー用に別のノードを作成することもできます。 2番目のソリューションではさらに多くのスペースが必要ですが、2回目のコールを作成するためにaccount_movementsのIDを読み取るのではなく、1回のコール(詳細または不要のユーザー)を作成するだけで、読み取り操作を行う方が簡単です。この例では、ユーザーのIDでaccount_movementsのIDに名前を付けることができます。しかし、それはいつも可能ではありません

関連する問題