recuperar query from datos data consultas child ios swift firebase firebase-database hierarchical-data

ios - query - ¿Forma más eficiente de recuperar datos de Firebase?



query firebase android (1)

Tengo un conjunto jerárquico de datos que quiero recuperar información de Firebase. A continuación se muestra cómo se ven mis datos:

Sin embargo, mi problema es el siguiente: al ver cómo se estructuran los datos, cuando quiero obtener el name o object id de object id de un attendee , tengo que realizar el siguiente código:

func getAttendees(child: NSString, completion: (result: Bool, name: String?, objectID: String?) -> Void){ var attendeesReference = self.eventsReference.childByAppendingPath((child as String) + "/attendees") attendeesReference.observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) -> Void in //Get the name/object ID of the attendee one by one--inefficient? let name = snapshot.value.objectForKey("name") as? String let objectID = snapshot.value.objectForKey("objectID") as? String if snapshot != nil { println("Name: /(name) Object ID: /(objectID)") completion(result: true, name: name, objectID: objectID) } }) { (error) -> Void in println(error.description) } }

Ahora esto pasa por cada niño asistente y toma el nombre y la identificación del objeto uno por uno. Cuando la función se completa, guardo cada valor en un diccionario. Al hacerlo, esta función se llama varias veces y puede ser muy lenta, especialmente cuando se va a / desde una base de datos tantas veces. ¿Hay una manera más eficiente de hacer esto? He intentado buscar en FEeventType.Value pero parece devolver todo lo que tengo dentro del hijo de los attendees , cuando lo único que realmente quiero es el name y el objectID de objectID de cada attendee almacenados en algún tipo de diccionario. Cualquier ayuda sería apreciada. ¡Gracias!


Una de las reglas de oro de Firebase es anidar solo sus datos cuando siempre desea recuperarlos . El motivo de esta regla es que Firebase siempre devuelve un nodo completo. No puede recuperar parcialmente algunos de los datos en ese nodo y no otros datos.

La guía de Firebase sobre estructuración de datos dice lo siguiente al respecto:

Debido a que podemos anidar datos de hasta 32 niveles de profundidad, es tentador pensar que esta debería ser la estructura predeterminada. Sin embargo, cuando buscamos datos en una ubicación en nuestra base de datos, también recuperamos todos sus nodos secundarios. Por lo tanto, en la práctica, es mejor mantener las cosas lo más planas posible, del mismo modo que se estructurarían las tablas SQL.

Realmente debería leer toda la sección de los documentos, ya que contiene algunos ejemplos bastante buenos.

En su caso, deberá modificar su estructura de datos para separar los asistentes al evento de los metadatos del evento:

events -JFSDFHdsf89498432 eventCreator: "Stephen" eventCreatorId: 1764137 -JOeDFJHFDSHJ14312 eventCreator: "puf" eventCreatorId: 892312 event_attendees -JFSDFHdsf89498432 -JSAJKAS75478 name: "Johnny Appleseed" -JSAJKAS75412 name: "use1871869" -JOeDFJHFDSHJ14312 -JaAasdhj1382 name: "Frank van Puffelen" -Jo1asd138921 name: "use1871869"

De esta forma, puede recuperar los metadatos del evento sin recuperar los asistentes y viceversa.