0

我的會員將能夠使用X個小部件自定義他們的個人資料頁面,每個小部件顯示不同的數據,例如音樂列表,他們正在關注的人員列表等。NHibernate Eager Loading - 大量無關數據

幾個小部件包括: - 媒體名單,他們已經上傳 - 人名單,他們都跟隨 - 人名單如下他們 - HTML /文本小 - 媒體統計(NUM下載等) - 其它評論插件會員發表評論

一些小部件將不得不頁面返回數據,因爲可能有數百個結果。

我沒有做過的那一刻任何優化,所以它是做大量的工作DB的返回所有數據......這將是檢索數據的最有效方法......每個小部件會1 DB調用可以接受嗎?每頁可能有5-20個小部件。

如果您需要了解我的情況的更多信息,請隨時提問。

Paul

回答

0

因爲你剪了你的工作部件的正確的事情將是每個插件爲其所需的所有功能做一個查詢。即使你通過AJAX檢索小部件也是如此(正如cbp指出的那樣,這不是一個壞主意)。

其次,我將建立某種機制爲每個插件註冊它的存在,然後將所有部件都註冊後,然後我會炒單查詢將包括所有部件查詢。 (從技術上來說,它又是多個查詢,但只需一次往返,請參閱NH參考中的MulriCriteria和MultiQueries)。

另外,不要忘記,惰性加載是隱藏的數據庫檢索,並且您可能會在正常加載的情況下使用延遲加載時產生巨大的性能影響(例如Foo.Bar.Name,您總是顯示Bar .Name值當您呈現Foo實體時)

即使每次請求的數據庫調用次數少於20-30次,性能也會下降,但這取決於實體,查詢,過濾器的大小和複雜程度以及大小的檢索數據集。

+0

謝謝你的答案...將修改我的應用程序通過ajax加載數據,並使用MultiCriteria加載儘可能多的數據。 – 2010-07-20 03:16:38

2

簡短回答:這要看。

來自未優化的狀態開始關閉,然後使用SQL事件探查器或C#探查像dotTrace制定出最好的地方進行改進。設定一個切合實際的目標(例如'小於800毫秒來加載頁面')。

一般來說,我發現性能開始後,請求約20-30數據庫調用受苦,但是這將取決於您的服務器上,數據庫的位置等

有很多東西,你可以嘗試:預緩存,使用連接而不是選擇等方式進行熱切獲取。儘管除非智能應用,否則沒有什麼能夠保證更好的性能。

對於具有許多小部件的頁面,常見的設計模式是異步加載使用AJAX,而不是一次性加載整個頁面每個插件。