acelerar el procesamiento de grandes conjuntos de resultados usando rmongodb

Estoy usando rmongodb para obtener todos los documentos de una colección en particular. Funciona pero estoy trabajando con millones de documentos pequeños, potencialmente 100M o más. Estoy usando el método sugerido por el autor en el sitio web: cnub.org/rmongodb.ashx

count <- mongo.count(mongo, ns, query)
cursor <- mongo.find(mongo, query)
name <- vector("character", count)
age <- vector("numeric", count)
i <- 1
while (mongo.cursor.next(cursor)) {
    b <- mongo.cursor.value(cursor)
    name[i] <- mongo.bson.value(b, "name")
    age[i] <- mongo.bson.value(b, "age")
    i <- i + 1
}
df <- as.data.frame(list(name=name, age=age))

Esto funciona bien para cientos o miles de resultados, pero ese bucle mientras está muy MUY lento. ¿Hay alguna manera de acelerar esto? Tal vez una oportunidad para multiprocesamiento? Cualquier sugerencia sera apreciada. Estoy promediando 1 M por hora y, a este ritmo, necesitaré una semana para crear el marco de datos.

EDITAR: He notado que cuantos más vectores haya en el bucle while, más lento será. Ahora estoy tratando de hacer un bucle por separado para cada vector. Todavía parece un hack, sin embargo, debe haber una mejor manera.

Edit 2: Estoy teniendo algo de suerte con data.table. Todavía se está ejecutando, pero parece que terminará el 12M (este es mi conjunto de prueba actual) en 4 horas, eso es un progreso, pero lejos de ser ideal

dt <- data.table(uri=rep("NA",count),
                 time=rep(0,count),
                 action=rep("NA",count),
                 bytes=rep(0,count),
                 dur=rep(0,count))

while (mongo.cursor.next(cursor)) {
  b <- mongo.cursor.value(cursor)
  set(dt, i, 1L,  mongo.bson.value(b, "cache"))
  set(dt, i, 2L,  mongo.bson.value(b, "path"))
  set(dt, i, 3L,  mongo.bson.value(b, "time"))
  set(dt, i, 4L,  mongo.bson.value(b, "bytes"))
  set(dt, i, 5L,  mongo.bson.value(b, "elaps"))

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta