当前位置:  开发笔记 > 编程语言 > 正文

使用NoRM在MongoDB中进行延迟加载

如何解决《使用NoRM在MongoDB中进行延迟加载》经验,为你挑选了2个好方法。

我有一个类似的模型:(简化)

题:

public class Question
{
    public string QuestionID { get; set; }

    public string Title { get; set; }
    public string Body { get; set; }

    public List Answers { get; set; }
}

回答:

public class Answer
{
    public string QuestionID { get; set; }
    public string Body { get; set; }
}

我打算将数据存储在MongoDB中,并希望使用NoRM.

我的问题是:是否支持延迟加载?或者我可以将其设置为在文档存储上进行延迟加载..?

所以请求一个问题,也检索答案..?(两者都是存储在MongoDB上相同集合中的"帖子")



1> Gates VP..:

好吧,"Lazy Loading"的概念对于像MongoDB这样的数据库来说大多是陌生的.看看你的方案:Question有一个ListAnswers.

RDBMS中,"懒惰"部分允许您与原始文件分开加载"列表".实际上有两个查询发生,你只是想延迟第二个查询.

MongoDB中,只有一个查询发生.该Answers被嵌入的问题里面,所以你的要求Questions自动包含的列表Answers.

请查看NORM样本以获得更好的示例:http://normproject.org/samples

基本点是您提供的结构不再是多个表.它只是一个包含嵌入式文档的集合.所以"懒惰加载"的概念实际上是不必要的,因为你不能"懒惰加载"一个查询.


我不认为我同意.虽然嵌入肯定经常在mongoDB中完成(甚至可能在大多数情况下都是这样),但是当使用与id的链接时肯定会有很多次.这是延迟加载相关的上下文.但我自己还没有找到完美的答案.

2> 小智..:

我很欣赏这是一个老话题,但其他人可能仍然会找到它(就像我一样).延迟加载在MongoDB中都是可能的,并且由C#驱动程序支持.

查看以下类:LazyBsonDocument和LazyBsonArray

从C#驱动程序教程文档:"惰性类是特殊的,因为它们推迟了BSON的反序列化直到需要它.这对于你只需要一个或两个复杂文档中的字段是有用的,因为它不会产生成本反序列化整个文档或数组,但只是必要的部分.这种反序列化一次发生一个级别."

在撰写本文时,可以在此处找到教程文档:http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/

给出的示例非常类似于它涉及嵌套集合的问题,因此如果需要,看起来答案列表确实可以延迟加载.

希望这有助于某人,

缺口

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有