開發者學堂課程【Java 面試疑難點串講5:系統架構及項目設計:延遲加載】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/28/detail/625延遲加載
内容簡介:
一、延遲加載的常見問題
二、延遲加載的注意事項
對于這種延遲加載問題,實際上屬于 Spring + Hibemate 時代的産物,這個是Hibemate 比較雞肋的功能。
之是以說它雞肋主要是因為有如下問題:
1、幾乎所有的配置都需要打開延遲加載,否則整個的程式性能會收到嚴重的影響;
2、有可能會産生嚴重的“1+N” 查詢,例如:現在一個分類下有多個新聞資訊,那麼現在很明顯,如果此時沒有打開延遲加載,就意味着如果現在有10個分類的資料,那麼就會自動查詢10次的子表資料,那麼如果每個子的字段包含有3000篇新聞,那麼最終産生的結果就是3000W條資料,而且這些資料不是直接去使用。
3、當 Spring 與 Hibemate 結合的時候就會出現有一個頁面資料延遲打開的問題,也就是說希望 Session 一直到頁面後才進行關閉。
二、注意事項
将 Hibemate 中的 Sssion 延遲到頁面後進行關閉,那麼對于整個的事務處理是
常麻煩的,而且這種操作還需要進行一個 OpenSessionInView 過濾器的配置。
正是因為這樣的情況,在實際的開發過程之中,隻針對于需要進行顯示的資料.
例如:在查詢一個雇員的時候,希望取得雇員對應的部門資料,而且很确定這個雇員隻對應有一個部門的資訊,那麼就建議在業務層裡面,取得完雇員資訊之後,直接再使用 getter 方法查詢該雇員所對應的部門的資料資訊。
在業務層的控制是因為所有的 AOP 的切入點都是在業務層上完成的。随後到
整個頁面之中就可以直接在 JSP 頁面裡面利用 emp 對象裡面利用 emp 對象“${emp.dept.dname} ”。
對于程式的性能,基本上都出現在資料庫上,而如果說使用者很多,問題也會
現在資料庫上,在開發的時候為了保證資料庫的操作性能。
最好的做法就是:保證隻是查詢到所需要的資料,不需要的資料絕對不要去查,因為查詢會浪費磁盤的性能,而查詢的結果會占用記憶體,而 CPU 是通過記憶體讀取資料的,是以如果資料量大,或者控制不合理,那麼直接導緻系統變慢。