przyspieszyć przetwarzanie dużych zestawów wyników za pomocą rmongodb

Używam rmongodb, aby uzyskać każdy dokument w określonej kolekcji. Działa, ale pracuję z milionami małych dokumentów, potencjalnie 100M lub więcej. Korzystam z metody zaproponowanej przez autora na stronie internetowej: 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))

Działa to dobrze dla setek lub tysięcy wyników, ale ta pętla jest bardzo BARDZO powolna. Czy jest jakiś sposób, żeby to przyspieszyć? Może szansa na wieloprocesowość? Wszelkie sugestie będą mile widziane. Średnio 1M na godzinę i przy tej stawce potrzebuję tygodnia tylko na zbudowanie ramki danych.

EDYCJA: Zauważyłem, że im więcej wektorów w pętli while, tym wolniej. Próbuję teraz zapętlić osobno dla każdego wektora. Mimo to wydaje się być hackiem, ale musi być lepszy sposób.

Edytuj 2: Mam szczęście z danymi.tabela. Nadal działa, ale wygląda na to, że zakończy 12M (to jest mój obecny zestaw testów) za 4 godziny, to postęp, ale daleki od ideału

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"))

}

questionAnswers(2)

yourAnswerToTheQuestion