3
我通過休息服務返回大量數據。該查詢返回約200,000行數據,然後轉換爲XML。當我在IE8中運行此服務時,出現「存儲空間不足以完成此操作」的錯誤。Jersey Jax-RS的內存錯誤
有沒有這種方式返回大量數據的最佳做法?
數據庫在大約5秒內運行查詢,所以我猜測問題是JAXB將它轉換爲xml。
有沒有人有任何想法來改善這一點?
我通過休息服務返回大量數據。該查詢返回約200,000行數據,然後轉換爲XML。當我在IE8中運行此服務時,出現「存儲空間不足以完成此操作」的錯誤。Jersey Jax-RS的內存錯誤
有沒有這種方式返回大量數據的最佳做法?
數據庫在大約5秒內運行查詢,所以我猜測問題是JAXB將它轉換爲xml。
有沒有人有任何想法來改善這一點?
的問題
我假設你正在使用JPA,讓您的數據能夠被JAXB處理的對象。如果是這種情況,JPA對象可能會使用延遲加載,這意味着查詢可能無法一次實現所有數據。然而,隨着JAXB實現遍歷對象圖,越來越多的內容被帶入內存,直到用完爲止。
選項#1 - 以塊的形式提供數據
一種方法是返回成塊的數據,並提供一個URI像下面這樣:
這些參數與JPA查詢設置非常吻合:
namedQuery.setFirstResult(10);
namedQuery.setMaxResults(100);
選項#2 - 提供鏈接獲得更多數據
或者,而不是包括所有的數據,您可以提供鏈接獲得更多。例如,而不是:
<purchase-order>
<product id="1">
<name>...</name>
<price>...</price>
...
</product>
<product id="2">
<name>...</name>
<price>...</price>
...
</product>
...
</purchase-order>
您可以返回以下內容,然後客戶端可以使用提供的URI請求產品的詳細信息。您可以使用XmlAdapter將其映射到JAXB中。
<purchase-order>
<product>http://www.example.com/products/1</product>
<product>http://www.example.com/products/2</product>
...
</purchase-order>
有關XmlAdapter更多信息,請參見: