2010-01-13 86 views
1

這裏是場景。如何處理數據庫中有數百萬條記錄的業務對象集合?

我有一個應用程序。底層數據庫表有數百萬行。說表'書籍'有百萬行

在應用程序設計中,我有一個自定義業務對象和定製收集BookCollection,代表的藏書。我們寫了一個小ORM,它負責業務對象和數據集之間的映射。對象本身通過通過自定義屬性修飾其屬性來保存映射細節。

現在,有一種情況,BookCollection對象需要保存數千條記錄。

什麼是 交易的最佳策略?我是否也可以將Book 對象裝入BookCollection asnychrounsly或並行?什麼是 這個 方案中的建議做法?

+1

集合線程安全嗎?將Book的實例保存在內存中的開銷是多少?從數據庫中獲取圖書的數據的成本是多少?你更關心內存使用情況或性能?這些都是在您決定最佳策略之前需要回答的所有問題。 – Rory 2010-01-13 08:49:15

回答

0

根據需要將它們加載到List<Book>ReadOnlyCollection<Book>。除非記錄非常大(MB),否則數千個記錄不應該造成問題。

我通常會在一個查詢中檢索所有需要的記錄並以這種方式填充列表。

我不太明白你在這裏的策略是什麼 - 最佳是一個加載的術語(我的最佳和你的最佳可能是非常不同的)。以什麼方式優化?

3

我的第一個問題是;爲什麼你需要成千上萬的記憶書。有有效的情況下,但你只需要接受成本。但是對於大多數情況(搜索,過濾,排序,分頁)等,您只需從數據庫中獲取您主動需要的數據頁面,而這通常不是那麼多。

即使你確實需要所有的人,你不一定需要他們同時 - 例如,你可以建立一個迭代器塊(yield return)過類似IDataReader,並且只處理一行一次。這實際上並不像您想象的那麼多,並且通常更適合緩衝大量數據。如果您需要流媒體數據上的多個聚合(只讀一次),PushLinq可以爲您提供幫助。

在許多其他情況下,可以在數據庫中執行聚合等操作。這是LINQ很好的做法之一 - 讓你使用你的領域模型中的對象模型在後端數據庫中表達一個聚集。

具體情況是什麼?

相關問題