2010-01-13 60 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很好的做法之一 - 让你使用你的领域模型中的对象模型在后端数据库中表达一个聚集。

具体情况是什么?

相关问题