【问题标题】:How to model structures such as family trees in document databases如何对文档数据库中的家庭树等结构进行建模
【发布时间】:2011-03-06 01:58:42
【问题描述】:

我一直在研究文档数据库,特别是 RavenDb,所有示例都清晰易懂。我只是找不到任何我们事先不知道给定结构有多少级别的示例。举个例子,给定以下类,您将如何保留家谱:

public class Person{
     public string Name {get;set;} 

     public Person Parent {get;set;}
     public Person[] Children {get;set;}
}

在我见过的大多数示例中,我们搜索聚合根并制作成一个文档。聚合根和边界是什么在这里并不那么明显。

【问题讨论】:

  • Rune,如果可能,请将答案标记为已接受的答案。

标签: document-database ravendb


【解决方案1】:

Ayende 刚刚发布了一个 blog post 来回答这个问题。

【讨论】:

  • 刚刚在 RSS-feed 中看到了 :) 非规范化数据的解决方案要求您准确地知道您在 UI 中的任何地方都需要什么,但我想在大多数情况下这是我会使用的技术。
  • 是的,好点,但我认为理解这部分是 RavenBD v RDMS 的主要不同之处。另外,您可以使用索引放在文档顶部以提取其他“视图”。
  • 为了使任何更新更容易,您可以使用基于集合的操作(请参阅groups.google.com/group/ravendb/browse_thread/thread/…),这样您就可以使用索引直接更新文档,而不是从服务器拉取它们,修改并返回它们.您也可以 PATCH 文档,请参阅ravendb.net/documentation/docs-http-api-patch
【解决方案2】:

我猜对于 RavenDb,您必须将 Id 保留在您的对象中:

public class Person {
    public string Name { get; set; }
    public string ParentId { get; set; }
    public string[] ChildrenIds { get; set; }
}

查看此页面,尤其是底部,了解更多信息:http://ravendb.net/documentation/docs-document-design

【讨论】:

  • 对,这也是我的初衷。但正如它所说,这在某种意义上违背了文档数据库背后的基本思想。与更多聚合的文档相比,查询以这种方式建模的数据可能非常慢。我正在寻找的是一些不太“明显”的策略。
  • 我在 RavenDb Google 群组 (groups.google.com/group/ravendb/browse_thread/thread/…) 中发布了此内容。我希望您很快就会得到答复。
  • 我想这部分取决于你认为你的“聚合根”是什么。例如,普通操作是否将某个特定的人及其所有后代拉到某个级别,即 3 代?如果是这样,您可以将其存储为您的文档。 RavenDB 的一般原则是写入成本高,但读取成本低。所以文件应该独立存在。
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 2011-09-11
  • 1970-01-01
  • 2017-04-07
  • 2018-01-20
  • 2017-11-28
  • 2013-09-28
  • 1970-01-01
相关资源
最近更新 更多