2013-07-03 48 views
0

我有一個關於MongoDB的結果一個一般性的問題:可以說我有一萬億的結果,我想分手了使用卡斯巴司機我似乎仍然即使使用limit命令來獲得OutOfMemoryError異常。對於如何處理巨大的結果集,除了使用限制和懶惰地打開下一頁之外,是否有一般性建議?斯卡拉大(MongoDB的)處理結果集

或者可以一個甚至使用視圖的方式輕鬆地處理這個過程?

是否有某種magick技巧,使其更容易一點?

問候,

斯特凡

+1

你能提供你如何查詢和遍歷結果集的見解? – Ross

回答

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) 

     /** 

所以,不管你是什麼你是否應該首先限制光標大小,因爲大光標總是會以糟糕的表現結束。

這當然不是說我想有elgant解決方案。