2016-02-16 36 views
0

如果結果集很大,則在內存(服務器高速緩存,例如hazelcast)中使用整個結果集將不可行。對於較大的結果集,您無法承受它們的內存。在這種情況下,您必須一次獲取大塊數據(基於查詢的分頁)。使用基於查詢的分頁的缺點是,會有多個對數據庫的多個調用請求。在休眠/ JPA中基於緩存和基於查詢的分頁混合

任何人都可以建議如何實現它的混合方法。 我沒有把任何示例代碼放在這裏,因爲我認爲問題更多地是關於邏輯而不是特定的代碼。如果你需要示例代碼,我可以把它。

在此先感謝。

回答

1

最有效的解決方案是使用主鍵作爲分頁標準。這使我們能夠依賴一類結構,比如簡單的RDBMS範圍查詢進行優化,被查詢實體的主鍵將會最有可能已被索引。

使用主鍵上的範圍查詢檢索數據是一個兩步過程。首先必須檢索主鍵的集合,然後執行一個步驟來生成間隔以正確標識數據的適當子集,然後是針對數據的實際查詢。

這種方法幾乎和蠻力版本一樣快。內存消耗約爲十分之一。通過爲此實現選擇適當的頁面大小,您可以更改執行時間與內存消耗之間的比率。這個版本也是無狀態的,它不會像版本那樣保留對資源的引用,也不會像使用setFirstResult/setMaxResult的版本那樣壓縮數據庫。

Effective pagination using Hibernate

+0

這裏的要求是使用內存高速緩存的混合方法(我們使用hazelcast)和休眠分頁。 – Vivek