0

我有一个关于 MongoDB 结果的一般性问题:假设我有一万亿个结果,我想使用 Casbah 驱动程序拆分这些结果,即使使用 limit 命令,我似乎仍然会得到 OutOfMemoryErrors。除了通过使用限制拆分它们并懒惰地点击下一页之外,是否有关于如何处理巨大结果集的一般建议?

或者甚至可以以一种方式使用视图来轻松处理这个过程?

是否有某种魔术技巧可以使它更容易一些?

问候,

斯特凡

4

1 回答 1

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)

      /**

因此,无论您做什么,都应该将光标大小限制在第一位,因为大光标总是会导致性能不佳。

这当然不是我想要的优雅解决方案。

于 2013-08-24T17:19:41.390 回答