Acelerar la obtención de publicaciones para mi aplicación de red social mediante el uso de consultas en lugar de observar un solo evento repetidamente

Tengo una serie de claves que conducen a publicar objetos para mi red social como / posts / id / (información de publicación)

Cuando cargo las publicaciones, cargo / posts / 0 y luego / posts / 1, etc., utilizando el método observeSingleEventOfType (.Value).

Utilizo un lazyTableView para cargar 30 a la vez y es bastante lento. ¿Hay alguna manera de usar uno de los métodos de consulta u otra forma de hacerlo más rápido, incluso si tengo que reestructurar los datos en mi árbol JSON?

Vengo de Parse re-implementando mi aplicación y hasta ahora la experiencia ha sido bastante buena. Solo en esto estoy un poco atascado. Gracias de antemano por la ayuda!

EDITAR:

func loadNext(i: Int) { 

    // check if exhists
    let ideaPostsRef = Firebase(url: "https://APPURL")

    ideaPostsRef.childByAppendingPath(i.description).observeSingleEventOfType(.Value, withBlock: {
        (snapshot) in

        if i % 29 == 0 && i != 0 && !self.hitNull { return }
            // false if nil
            // true if not nil
        if !(snapshot.value is NSNull) {
            let postJSON  = snapshot.value as! [String: AnyObject]
            print("GOT VALID \(postJSON)")
            let post = IdeaPost(message: postJSON["message"] as! String, byUser: postJSON["user"] as! String, withId: i.description)
            post.upvotes = postJSON["upvotes"] as! Int
            self.ideaPostDataSource.append(post)
            self.loadNext(i + 1)
        } else {
            // doesn't exhist
            print("GOT NULL RETURNING AT \(i)")
            self.doneLoading = true
            self.hitNull = true
            return
        }
    }
}

Esta función recursiva esencialmente se ejecuta obteniendo el valor para la clave número i de firebase. Si es NSNULL, sabe que es la última publicación posible para cargar y nunca lo vuelve a hacer. Si NSNULL no recibe un golpe pero i% 29 == 0, entonces regresa como un caso base, por lo que solo se cargan 30 publicaciones a la vez (0 indexadas). Cuando configuro doneLoading a truetableView.reloadData() se llama usando un observador de propiedades.

Aquí hay una muestra de cómo se ve la matriz que estoy buscando

"ideaPosts" : [ {
    "id" : 0,
    "message" : "Test",
    "upvotes" : 1,
    "user" : "Anonymous"
  }, {
    "id" : 1,
    "message" : "Test2",
    "upvotes" : 1,
    "user" : "Anonymous"
  } ]

Respuestas a la pregunta(1)

Su respuesta a la pregunta