我有一个关于MongoDB结果的一般性问题:假设我有一万亿个结果,我想使用Casbah驱动程序拆分,我似乎仍然使用limit命令得到OutOfMemoryErrors。关于如何处理巨大的结果集除了通过使用限制并且懒惰地敲击下一页之外,是否有一般性建议?
或者甚至可以以一种方式使用视图来轻松处理这个过程?
是否有某种魔术技巧可以让它更容易一些?
的问候,
的Stefan
答案 0 :(得分:0)
确定,
这不是一个直接的解决方案,但一般来说大游标的问题是它们最终将成为IO绑定。
所以我添加了在应用程序中分页结果的功能:
在结果之间循环(向前和向后)我使用以下方法:
def findPagesWithGreaterId(pageid: String, limit: Int): List[Page] =
findAsListSortedLimit(MongoDBObject("_id" -> MongoDBObject("$gt" -> new ObjectId(pageid))), MongoDBObject("_id" -> 1), limit)
/**
* finds a slice of pages with a smaller id (required for paging)
*/
def findPagesWithSmallerId(pageid: String, limit: Int): List[Page] =
findAsListSortedLimit(MongoDBObject("_id" -> MongoDBObject("$lt" -> new ObjectId(pageid))), MongoDBObject("_id" -> 1), limit)
/**
所以,无论你做什么,都应该将光标大小限制在第一位,因为大光标总是会以糟糕的性能结束。
这当然不是我想要的优雅解决方案。