我正在設計一個多層數據庫驅動的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)
我好奇這種情況下的標準工業設計模式是什麼?
`Collection getStreetSigns(Street street)`那是你的問題。儘管應用程序可能不知道它是由數據庫支持的,但它應該能夠控制它所處理的集合的大小。因此,如果該siz沒有固有限制,則應該允許應用程序指定一個:`Collection getStreetSigns(Street street,int maxResults,int firstResult)`。 –
2015-12-20 14:15:03