我正在设计一个多层数据库驱动的 Web 应用程序 - SQL 关系数据库、用于中间服务层的 Java、用于 UI 的 Web。语言其实并不重要。
中间服务层执行数据库的实际查询。用户界面只是要求某些数据,并不知道它是由数据库支持的。
问题是如何处理大数据集? UI 请求数据,但结果可能很大,可能太大而无法装入内存。例如,街道标志应用程序可能具有以下服务层:
StreetSign getStreetSign(int identifier)
Collection<StreetSign> getStreetSigns(Street street)
Collection<StreetSign> getStreetSigns(LatLonBox box)
UI 层要求所有街道标志都满足某些标准。根据标准,结果集可能会很大。 UI 层可能会将结果划分为单独的页面(对于浏览器)或仅将它们全部呈现(服务于 Goolge Earth)。潜在的巨大结果集可能是性能和资源问题(内存不足)。
一种解决方案是不返回完全加载的对象(StreetSign 对象)。而是返回某种延迟加载每个单独对象的结果集或迭代器。
另一个解决方案是更改服务 API 以返回所请求数据的子集:
Collection<StreetSign> getStreetSigns(LatLonBox box, int pageNumber, int resultsPerPage)
当然,UI 仍然可以请求巨大的结果集:
getStreetSigns(box, 1, 1000000000)
我很好奇这种场景的标准行业设计模式是什么?