1. 程式人生 > >資料查詢 常見的4種分頁方法

資料查詢 常見的4種分頁方法

常見的4種分頁方法:
1)控制元件分頁,主要工作在前臺【軟翻頁】
後臺一次性返回所有資料都交給前臺的VO,前臺利用類似DataGrid這樣的控制元件,一次性顯示一部分,實現分頁功能

2)服務層分頁,主要工作在後臺【軟翻頁】
前臺的查詢請求,原樣提交給持久層,持久層返回所有結果,服務層保持所有結果,並選擇性的反饋給前臺其中一頁。
前臺再發來翻頁請求時,不必再向持久層請求查詢,而直接從保持的結果中返回其他內容即可。

3)持久層軟分頁,主要工作在後臺【軟翻頁】
和2的原理類似,但是這次快取的工作由持久層框架來負責。服務層第一次訪問持久層時,持久層對資料庫做全件檢索,但只給服務層返回第一頁的資料。從第二頁開始,服務層再對持久層提出請求時,持久層不必再做資料庫訪問,而直接從快取中將資料提供給服務層。

4)持久層硬分頁,主要工作在後臺【硬翻頁】
無論你實用什麼持久層工具,總之複寫它的SQL執行函式,要根據不同資料庫實現使用不同的方言。
說白了就是重新拼寫SQL文字串,使SQL文在不改變原有用意的基礎上,加上記錄條數選擇的功能
如:select top 100 from tab; (SqlServer) ,這個 top 100 就是從Bean中的pageSize之類的控制屬性取得並拼到SQL文中的

4種方式各有優缺點,各自有不同的實用場景。前3種都是“軟翻頁”,最後一種是“硬翻頁”
1)優點:一次性訪問伺服器。一次耗時,之後的翻頁非常之快
缺點:第一次耗時非常高;且由於資料量的問題,不適用於大規模資料查詢;資料實時性不高

2)優點:較之第1種,首次查詢耗時大為減少(因為網路傳輸量大為下降)
缺點:首次耗費在伺服器端的查詢時間仍然不少;由於資料一次性查出儲存在服務層,所以資料的實時性不高

3)基本同2,但由於有些持久層框架已經具備了很好的快取軟翻頁功能,使服務層程式碼的編寫不必再多考慮翻頁的問題了。

4)優點:查詢速度最快;查詢的結果實時性最好
缺點:根據不同的資料庫所支援的分頁查詢語法,某些資料庫(如Oracle)當查詢到倒數幾頁時,時間耗費幾乎與第2種相同;
由於高實時性,可能造成使用者在翻頁時,漏看資料(如:每頁顯示100條,使用者看第一頁時,第101條資料在第二頁,所以看不到。在此用開啟第一頁到翻頁到第二頁的這段時間裡,其他使用者刪除了前100條資料中的任一一條,此使用者看第2頁時,剛才的第101條資料現在是第100條了,所以它在第一頁而不在第二頁,這就導致了此使用者漏看資料。有點像論壇頂帖子:)

對於一般商業開發來說,通常在第3和第4種中選擇一種。總體來說第4種應該是比較好的選擇,優點大於缺點。