我正在设计一个多层数据库驱动的 Web 应用程序——SQL 关系数据库、用于中间服务层的 Java、用于 UI 的 Web。语言真的不重要。
中间服务层执行数据库的实际查询。UI 只是要求某些数据,并且不知道它是由数据库支持的。
问题是如何处理大型数据集?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)
我很好奇这种场景的标准行业设计模式是什么?