8

MongoDB を構築しました。特定のグルーピングで集計したい。私はこのドキュメントを見つけました。すべて問題ありませんが、特定の制限が指摘されています。

  1. パイプラインからの出力には、16 メガバイトしか含めることができません。結果セットがこの制限を超えると、aggregate コマンドでエラーが発生します。

  2. 単一の集計操作がシステム RAM の 10% を超えて消費する場合、操作はエラーを生成します。

  3. 集計システムは現在$group、操作をメモリに格納しているため、多数のグループを処理するときに問題が発生する可能性があります。

MongoDB アグリゲーションで処理できる行/ドキュメントの数は? これを使うのが怖いです。誰でもこれについて私を案内できますか?

4

2 に答える 2

18

Googleグループから有効で役立つ回答を得ました。皆さんと共有したいと思います。

制限はドキュメントの数にはありません。制限は、最終結果 (または中間結果) によって使用されるメモリの量にあります。

したがって、200,000 個のドキュメントを集計しても、結果が 16MB の結果に収まる場合は問題ありません。100 個のドキュメントを集計した結果が 16 MB に収まらない場合は、エラーが発生します。

同様に、中間結果に対して sort() または group() を実行し、その操作に使用可能な RAM の 10% 以上が必要な場合、エラーが発生します。これは、所有しているドキュメントの数と大まかに関連しているだけです。これは、パイプラインの特定のステージの大きさの関数です。

任意の設定で 16MB 増やすことはできますか?

16MB の制限は最終結果のみですか、それとも特定の集計 (つまり、中間結果 + 一時的な保有物 + 最終結果) のためですか?

16MB の制限は調整できません。これは、MongoDB のドキュメントの最大サイズです。集約フレームワークは現在コマンドとして実装されているため、集約の結果は 1 つのドキュメントで返される必要があります。したがって、16 MB の制限があります。

この投稿を参照してください

于 2013-01-29T10:29:18.253 に答える
1

集計フレームワークで発生する可能性のある処理の量は、スキーマによって異なります。

集約フレームワークは、現時点で 1 つのドキュメントの相対のみを出力できます (より大きな出力については、https://jira.mongodb.org/browse/SERVER-3253を参照してください)。次の形式で出力されます。

{
    result: { //the result },
    ok: 1/0
}

したがって、$group/から返されるもの$projectが大きすぎて、必要な結果が返されないことを確認する必要があります。ほとんどの場合、$groupこれは当てはまりません。数百万行の単純な例でも、16Meg 未満の応答になる可能性があります。

ドキュメントのサイズや実行したい集計クエリのサイズがわからないため、アドバイスできません。

単一の集計操作がシステム RAM の 10% を超えて消費する場合、操作はエラーを生成します。

それは本当に自明です。操作のワーキング セットが大きすぎて 10% を超える RAM (計算フィールドまたはグループ化フィールド$groupの /Computed fields/ $sort) を使用する場合、操作は機能しません。

集計フレームワークを悪用してアプリのロジックを実行しようとしない限り、この問題に実際に遭遇することはありません。

現在、集計システムは $group 操作をメモリに格納しているため、多数のグループを処理するときに問題が発生する可能性があります。

$groupをメモリ内で実行しないのは非常に難しい (フィールドを「グループ化」する) ため、これはそのグループに対する操作もメモリ内にあることを意味します$sort

于 2013-01-10T10:47:26.767 に答える