如何处理数据库中有数百万条记录的业务对象集合?

时间:2010-01-13 08:41:11

标签: c# orm

这是情景。

我有一个申请。底层数据库表有数百万行。假设表'Books'有数百万行

在应用程序设计中,我有一个自定义业务对象 Book 和custom-collection BookCollection 来表示书籍集合。我们编写了一个小型ORM,它负责业务对象和数据集之间的映射。对象本身通过自定义属性修饰其属性来保存映射详细信息。

现在,有一种情况是BookCollection对象需要保存数千条记录。

  

什么是最佳策略   在这里交易?我还可以加载Book   对象进入BookCollection   asnychrounsly还是并行?什么是   推荐的做法   情景?

2 个答案:

答案 0 :(得分:3)

我的第一个问题是;为什么你需要记忆中的数千本书。那里有 的有效方案,但是你只需要接受费用。但对于大多数事情(搜索,过滤,排序,分页)等,您只需从数据库中获取您主动需要的数据页面,这通常不会那么多。

即使你确实需要所有这些,你也不一定需要同时 - 例如,你可以设置一个迭代器块(yield return)像IDataReader一样,一次只处理一行。这实际上并不像您想象的那么多,并且通常比缓冲大量数据更可取。如果您需要对流数据进行多次聚合(只读一次),PushLinq可以为您提供帮助。

在许多其他情况下,可以在数据库中执行聚合操作;这是LINQ做得很好的事情之一 - 让你使用域模型中的对象模型在后端数据库中表达聚合。

具体情况是什么?

答案 1 :(得分:0)

根据需要将它们全部加载到List<Book>ReadOnlyCollection<Book>。除非记录非常大(MB),否则数千个不应该成为问题。

我通常会在一个查询中检索所有需要的记录并以这种方式填充列表。

我不太明白你的策略是什么意思 - 最优是一个加载的术语(我的最优和你的最优可能非常不同)。以什么方式优化?