nosql - RavenDB 数据建模

标签 nosql ravendb document-storage

我最近开始关注 RavenDB,并尝试看看它是否适合我们的一些项目。然而,我遇到了一些关于对简单数据结构进行建模的“正确”方法的问题。我将尝试描述它:

  • 有 3 种类型的对象:指南类别链接
  • “根”指南可以包含 0 个或多个子指南
  • 指南可以包含 0 个或多个类别
  • 一个类别可以包含0个或多个链接

从视觉上看,结构是:

  • 根指南(0 个或多个)
    • 子指南(0 个或多个)
      • 类别(0 个或多个)
        • 链接(0 个或多个)
    • 类别(0 个或多个)
      • 链接(0 个或多个)

实际数据中大约有20个根Guide,每个根Guide下有大约3-5个子Guide。每个指南(根指南和子指南)下都有 15-25 个类别。每个类别下有 5 到 20 个链接。

我最初的想法是像这样建模(简化模型):

Guide
---------------
Id
ParentGuideId
Title

Category
---------------
Id
GuideId
Title

Link
---------------
Id
CategoryId
Title

这几乎是关系模型,我意识到这可能不是在 RavenDB 中建模数据的正确方法。那么还有什么选择呢?我想问题是我不想像这样存储层次结构:

Guide
---------------
Id
Title
SubGuides
Categories

SubGuide
---------------
Title
Categories

Category
---------------
Title
Links

Link
---------------
Title

因为它会生成包含潜在数千个子对象的文档。请记住,上面的模型是经过简化的。实际上,每种类型都有更多的数据,因此如果我们采用此模型,RavenDB 中的 20 个根指南文档将会非常庞大​​。

还有其他选择吗?也许这是我多年来对关系数据库的不良教育,但也许这个场景既不适合 SQL,也不适合 RavenDB?

编辑(添加基本查询)

访问数据相当简单。我有以下要求:

  1. 选择包含所有子指南的根指南列表。
  2. 对于特定指南(根指南或子指南),获取所有子指南(如果是根指南)、类别和链接。

这基本上就是我所需要的。然而,评估 RavenDB 或类似数据库的原因之一是添加一些搜索功能。正如我已经提到的,还有一些有关链接、类别和指南的更多信息,例如描述、标签等。因此,如果能够搜索所有这些信息,那就太好了。

最佳答案

我会处理一些事情,以便指南成为一个文档。 类别和链接嵌入在该文档中。

一个指南可以有一组子指南。

第一个查询是查询所有指南及其子指南。你这样做:

session.Query<Guide>().Include(x=>x.SubGuides).Where(x=>x.Parent == null).ToList();

这将在一次服务器查询中为您提供所有信息。

session.Include<Guide>(x=>x.SubGuides).Load("guides/123")

这将为您提供包含所有子指南的指南。

关于nosql - RavenDB 数据建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349501/

相关文章:

nosql - NULL字段文档模型

node.js - Redis 主键和副键

RavenDB 更新嵌套文档?

mongodb - 使用 NoSQL 文档存储数据库有哪些实际用例?

liferay - 对 Liferay 6.2 文档库实现存档/备份

mongodb - 获取 MongoDB 中特定字段平均值的最快方法

c - 存储redis键的最佳方式

powershell - 通过 REST 将新文档存储到 RavenDB 中的特定集合

c# - Serilog RavenDb 接收器无法在 asp.net 5 应用程序中工作

versioning - CouchDB 版本控制策略