假設與SQL Server和一個DBML一個典型的域實體接近/ L2S DAL與最重要的是一個邏輯層:並行化L2S實體檢索
在的情況下的延遲加載是不是一種選擇,我已經在結算約定,其中獲取實體列表並不會獲得每個項目的子實體(不加載),但是獲取單個實體(急切加載)。
由於獲得單個實體也會得到孩子,它會導致一個級聯效應,其中每個孩子也會得到它的孩子。這聽起來很糟糕,但只要模型不太深,我通常不會看到超過易用性好處的性能問題。
因此,如果我想要得到一個列表,其中每個項目都與兒童充分水合,我結合了GetList和GetItem方法。所以我會得到一個列表,然後循環通過它獲取每個項目的完整級聯。即使這在我所從事的許多項目中都可以接受 - 但我最近遇到了需要更高效的更大型號和/或更多數據的情況。
我發現分割循環並在多個線程上執行它會產生出色的結果。在我的第一個實驗中,從一個特定項目中選出50個項目,我做了10個項目的5個線程,每個項目的時間都提高了3倍。
當然,里程會因項目而異,但其他條件相同時,這顯然是一個很大的機會。但是,在我進一步討論之前,我想知道其他人已經完成了哪些工作已經完成了。並行化這種類型的東西有什麼好方法?
傑夫,感謝您的回覆。不知道我們在同一頁上。我正在做一個單一的數據庫調用,返回一組記錄。這個問題與每條記錄的細節和每條記錄的細節等有關。它就像一個金字塔。 – 2010-04-24 16:36:51
實際上,我能得到的唯一列表是最上面的一個 - 其餘的必須是一個,除非我放棄在數據庫中進行連接,在這種連接中許多表(又名實體)被合併爲一個非規範化結果。但是,如果我在DAL中這樣做了,它會打破每個實體的孤立映射,並繞過它們的邏輯層,從而打開一堆完全不同的蠕蟲。這個問題似乎是數據驅動與域驅動方法的基本緊張\權衡。 – 2010-04-24 16:37:27