ускорить обработку большого результирующего набора с помощью rmongodb

Я использую rmongodb, чтобы получить каждый документ в определенной коллекции. Это работает, но я работаю с миллионами небольших документов, потенциально 100 миллионов и более. Я использую метод, предложенный автором на сайте: 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))

Это прекрасно работает для сотен или тысяч результатов, но цикл while ОЧЕНЬ ОЧЕНЬ медленный. Есть ли способ ускорить это? Может быть, возможность многопроцессорной обработки? Мы ценим любые предложения. Я в среднем 1М в час, и для этого мне понадобится неделя, чтобы построить фрейм данных.

РЕДАКТИРОВАТЬ: я заметил, что чем больше векторов в цикле while, тем медленнее он становится. Я сейчас пытаюсь зациклить отдельно для каждого вектора. Тем не менее, похоже, что взломать, должен быть лучший способ.

Редактировать 2: мне повезло с data.table. Он все еще работает, но похоже, что он закончит 12M (это мой текущий набор тестов) через 4 часа, это прогресс, но далеко не идеальный

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

}

Ответы на вопрос(2)

Ваш ответ на вопрос