我正在使用Primefaces Datatable組件,系統後端正在運行Glassfish和Oracle數據庫。如何將客戶端到數據庫的sql-requests頁面
當執行大型搜索操作時,AppServer上的負載變得太大。 Appserver始終加載完整的結果集,這是太多的負載。 我正在尋找通過從數據庫中選擇「頁面」來優化Appserver上的負載的方法嗎?
在Primefaces Datatable中使用分頁僅導致將頁面傳輸到客戶端。這很好,但Appserver仍然加載完整的結果集。
我在想,我也許可以:
- 首先做一個COUNT(*)對DB,看到總 結果集的大小。
- 然後在我的應用程序服務器SessionBean上僅選擇一個唯一標識符列表(代表完整選擇)
- 然後選擇一個「full resultset-data」頁面並將其返回給客戶端。
客戶端然後可以按下「下一頁」按鈕讓AppServer從數據庫中獲取第二頁。 這個提取將不得不使用'唯一標識符'-list(或者我可以使用'rownum'變量來指定完整選擇的子集)。 也就是說。在實踐中,我最終做「手動」分頁
我怎麼能使用Primefaces Datatable組件,並獲得控制在我的Appserver代碼時,用戶按下paginator按鈕?
處理此問題的任何替代方法當然是受歡迎的。
謝謝你的迴應。正如我理解PF中的Lazyload機制,完整的數據源被加載到數據模型(即進入內存)中。然後它會對該集進行過濾,排序和分頁。當數據源由數百萬個對象組成時(真正的巨大),這會表現不佳,並且有100多個併發用戶。我發現至少甲骨文已經沒有了。稱爲分析功能(其他供應商具有類似的機制),其中分頁在數據庫內完成,沒有性能損失。要使用這個,我需要在數據表控件中的按鈕。 –
@Erik:咦? 「first」和「pageSize」的哪一部分不理解?這不應該返回完整的數據庫副本。這將徹底擊敗「延遲加載」的含義,並使整個機制無用。如果您啓用了排序/篩選功能,那麼只需將該信息傳遞給該服務,以便它可以準確返回所需的數據。 – BalusC
我在PF Showcase頁面查看了這個例子。在我看來,完整的datamodel被緩存在數據模型中。< –