3

解析中のクラスに 10,000 を超えるレコードが追加されているアプリを開発しています。現在、PFQuery を使用してこれらのレコードをフェッチしようとしています (「スキップ」プロパティを使用しています)。しかし、10k を超えるレコードを取得できず、次のエラー メッセージが表示されます。

"10000 を超えるスキップは許可されていません"

すべてのデータが必要なので、これは私にとって大きな問題です。

誰もそのような問題に遭遇しましたか。あなたの意見を共有してください。

ありがとう

4

2 に答える 2

3

問題は確かにmongo skip操作のコストによるものです。スキップ演算子が不要なクエリを作成できます。私が推奨する方法は、objectId を orderBy にしてから、objectId > 最後に生成された objectId という条件を追加することです。このタイプのクエリは、シークに O(N^2) のコストがかかるスキップ ページネーションとは異なり、インデックスを作成して高速のままにすることができます。

于 2013-02-11T18:37:12.363 に答える
1

私の推測では、MongoDB のスキップ実装のパフォーマンスの問題に基づいていると思います。

cursor.skip() メソッドは、サーバーがコレクションまたはインデックスの先頭から移動してオフセットを取得するか、結果を返し始める前に位置をスキップする必要があるため、多くの場合コストがかかります。オフセット (上記の pageNumber など) が増加すると、cursor.skip() は遅くなり、CPU の負荷が高くなります。大きなコレクションでは、cursor.skip() が IO バウンドになることがあります。

于 2013-02-11T05:53:50.920 に答える