我使用rmongodb获得AA特定集合中的每个文件。 它的工作原理,但我与数以百万计的小文件,可能100M以上的工作。 我使用的是由作者在网站上建议的方法: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))
这工作得很好成百上千的结果,但是,虽然环是非常非常慢。 是否有某种方式来加速这个吗? 也许对于多处理器的机会? 任何建议,将不胜感激。 我每小时平均1M和以这样的速度,我需要一个星期只来构建数据帧。
编辑:我注意到,在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"))
}