这是情景。
我有一个申请。底层数据库表有数百万行。假设表'Books'有数百万行。
在应用程序设计中,我有一个自定义业务对象 Book 和custom-collection BookCollection 来表示书籍集合。我们编写了一个小型ORM,它负责业务对象和数据集之间的映射。对象本身通过自定义属性修饰其属性来保存映射详细信息。
现在,有一种情况是BookCollection对象需要保存数千条记录。
什么是最佳策略 在这里交易?我还可以加载Book 对象进入BookCollection asnychrounsly还是并行?什么是 推荐的做法 情景?
答案 0 :(得分:3)
我的第一个问题是;为什么你需要记忆中的数千本书。那里有 的有效方案,但是你只需要接受费用。但对于大多数事情(搜索,过滤,排序,分页)等,您只需从数据库中获取您主动需要的数据页面,这通常不会那么多。
即使你确实需要所有这些,你也不一定需要同时 - 例如,你可以设置一个迭代器块(yield return
)像IDataReader
一样,一次只处理一行。这实际上并不像您想象的那么多,并且通常比缓冲大量数据更可取。如果您需要对流数据进行多次聚合(只读一次),PushLinq可以为您提供帮助。
在许多其他情况下,可以在数据库中执行聚合操作;这是LINQ做得很好的事情之一 - 让你使用域模型中的对象模型在后端数据库中表达聚合。
具体情况是什么?
答案 1 :(得分:0)
根据需要将它们全部加载到List<Book>
或ReadOnlyCollection<Book>
。除非记录非常大(MB),否则数千个不应该成为问题。
我通常会在一个查询中检索所有需要的记录并以这种方式填充列表。
我不太明白你的策略是什么意思 - 最优是一个加载的术语(我的最优和你的最优可能非常不同)。以什么方式优化?