SQL リレーショナル データベース、中間サービス層用の Java、UI 用の Web など、多層データベース駆動の Web アプリケーションを設計しています。言語はあまり関係ありません。
中間サービス層は、データベースの実際のクエリを実行します。UI は単に特定のデータを要求するだけで、データベースに支えられているという概念はありません。
問題は、大規模なデータ セットをどのように処理するかです。UI はデータを要求しますが、結果が巨大になる可能性があり、大きすぎてメモリに収まらない可能性があります。たとえば、道路標識アプリケーションには、次のようなサービス レイヤーがあるとします。
StreetSign getStreetSign(int identifier)
Collection<StreetSign> getStreetSigns(Street street)
Collection<StreetSign> getStreetSigns(LatLonBox box)
UI レイヤーは、すべての道路標識がいくつかの基準を満たすように要求します。基準によっては、結果セットが膨大になる場合があります。UI レイヤーは、結果を別々のページに分割するか (ブラウザー用)、単にそれらすべてを表示する (Goolge Earth に提供する) 場合があります。潜在的に巨大な結果セットは、パフォーマンスとリソースの問題 (メモリ不足) である可能性があります。
1 つの解決策は、完全に読み込まれたオブジェクト (StreetSign オブジェクト) を返さないことです。むしろ、個々のオブジェクトを遅延ロードするある種の結果セットまたは反復子を返します。
別の解決策は、要求されたデータのサブセットを返すようにサービス API を変更することです。
Collection<StreetSign> getStreetSigns(LatLonBox box, int pageNumber, int resultsPerPage)
もちろん、UI は引き続き膨大な結果セットを要求できます。
getStreetSigns(box, 1, 1000000000)
このシナリオの業界標準の設計パターンは何ですか?