2017-11-22 1 views
0

Ich habe eine Firebase-Datenbank, die wie folgt aussieht: enter image description here
Sie können denken, dass Objekte der Ebene 1 Listenelemente sind. Objekte der Ebene 2 sind entsprechende Listenelemente des Objekts der Ebene 1. Level 1 hat ungefähr 100 Objekte. Level 2 hat etwa 1000 Objekte.Initialisieren Sie Daten eines neuen Benutzers in FireBase

Wenn sich ein neuer Benutzer anmeldet, muss ich diese Struktur initialisieren (für alle Benutzer gleich). Das Durchschleifen aller Objekte und das Speichern im Firebase ist sehr langsam und ineffizient. Gibt es einen besseren Weg, dies zu tun?

Beispielcode:

for (int i = lvl1ObjCount; i >= 1; i--) { 

    String lvl1ObjKey = getLvl1KeyFromFirebase(); 
    setLvl1ObjInFireBase(new Level1Object(lvl1ObjKey)); 

    for (int j = lvl2ObjCount; j >= 1; j--) { 
     String lvl2ObjKey = getLvl2KeyFromFirebase(lvl1ObjKey); 
     setLvl2ObjInFireBase(new Level2Object(lvl1ObjKey, lvl2ObjKey)); 
    } 
} 
+0

Warum sagen Sie „Schleife durch alle Objekte und in Feuerbasis Spar sehr ist eine ineffiziente langsam“? Zeig uns deinen Code. –

+0

Ich habe die Frage aktualisiert. Es ist langsam, weil in der App viel mehr Ebenen und Objekte viel mehr Daten haben. Das Durchlaufen der Daten vom Benutzergerät führt zum Absturz der App oder zur Unbrauchbarkeit des Geräts. –

+0

Ich bin nicht überrascht, dass dies langsam ist, Sie sollten wirklich über [denormalizing] (https://en.wikipedia.org/wiki/Denormalization) und [Verschachtelung von Daten vermeiden, Datenstrukturen flattern und Daten erstellen, die skalieren] (https : //firebase.google.com/docs/database/android/structure-data#best_practices_for_data_structure). – Grimthorr

Antwort

0

Ich glaube, Sie Ihre Datentabelle abflachen sollte

folgt
{ 
    "users": { 
     "asdfas12321": { 
       "lvl1": "lvl1Key#2", 
       "lvl1": "lvl1Key#2", 
       }, 
     "asdfa112312": { ... }, 
     "1241dwqreq": { ... } 
    } 
} 

{ 
    "lvl1": { 
     "asdfas12321": { 
       "lvl2": "lvl2Key#1", 
       "lvl2": "lvl2Key#2", 
       }, 
     "asdfa112312": { ... }, 
     "1241dwqreq": { ... } 
    } 
} 
Verwandte Themen