paged、store and retrieve、Massive pushの 3 つのアプローチすべてを見てきました。
問題の解決策は、結果セットが非常に大きい理由とその生成方法にある程度依存すると思います。結果は時間の経過とともに増加しますか?一度にすべて計算されてからプッシュされますか?結果が得られたらすぐにストリーミングして返しますか?
ページングアプローチ
私の経験では、検索結果のページと同様に、クライアントが適切なサイズの結果セットのチャンクにすばやくアクセスする必要がある場合は、ページング アプローチを使用するのが適切です。ここでの考慮事項は、プロトコルの全体的なチャット性、クライアント ページ要求間の結果セット全体のキャッシュ、および/または結果のページを生成するのにかかる処理時間です。
保存と検索
格納と取得は、結果がランダム アクセスではなく、クエリが処理されるにつれて結果セットのサイズが大きくなる場合に役立ちます。ここで考慮すべき問題は、クライアントの複雑さと、ユーザーに部分的な結果を提供できるかどうか、またはクライアントに何かを返す前にすべての結果を計算する必要があるかどうかです (分散検索エンジンからの結果の並べ替えを考えてください)。
大プッシュ
大規模なプッシュ アプローチには、ほぼ確実に欠陥があります。クライアントがすべての情報を必要とし、それをモノリシックな結果セットにプッシュする必要がある場合でも、WS-ReliableMessaging(直接または独自の簡略化されたバージョンを介して) アプローチを取り、結果をチャンク化することをお勧めします。こうすることであなたは
- ピースがクライアントに確実に届くようにする
- クライアントからレシートを受け取るとすぐにチャンクを破棄できます
- サーバー側とクライアント側で5MBのXML、DOM、またはその他のものをメモリに保持する必要があるため、メモリ消費に関する問題を減らすことができます(結果をストリーミング方式で処理していないと仮定します)。
ただし、他の人が言っているように、結果セットのサイズ、その生成方法、および全体的なパフォーマンスが実際の問題であることがわかるまで、何もしないでください。