0

MongoDB の結果に関する一般的な質問があります。Casbah ドライバーを使用して分割したい 1 兆の結果があるとしましょう。 limit コマンドを使用しても OutOfMemoryErrors が発生するようです。制限を使用して次のページを遅延してヒットすることによってそれらを分割することとは別に、巨大な結果セットを処理する方法に関する一般的なアドバイスはありますか?

それとも、このプロセスを簡単に処理するためにビューを使用することはできますか?

少し簡単にする魔法のトリックはありますか?

よろしく、

ステファン

4

1 に答える 1

0

Ok、

これは直接的な解決策ではありませんが、大まかなカーソルの問題は、最終的に 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 に答える