【问题标题】:How do you decide when to create a collection versus a embedded document in MongoDB?您如何决定何时在 MongoDB 中创建集合和嵌入文档?
【发布时间】:2017-07-08 15:27:32
【问题描述】:

我目前正在通过 MongoDB 学习 noSQL,但我的学习和工作经验是使用关系数据库。

我目前有一个用户集合,我需要实现存储用户个人资料页面的网页点击量以及大约 5 个更多统计信息的功能。

我应该创建一个新集合来存储这些信息,还是应该创建一个嵌入式文档来将这 6 条信息存储在 Users 集合中?

谢谢!

【问题讨论】:

  • 我还要考虑一下应用程序将如何使用它。生成在上下文中更具“场景/视图”特定性的文档可能会带来好处,并且每次都提取一个巨大的文档可能没有意义,只是为了利用数据子集,每次对于该视图看起来都相同。但同样,不知道您的应用程序的外观。如果我使用事件溯源,我会创建更多特定于视图的读取模型,然后可能会拆分您的案例。

标签: mongodb nosql


【解决方案1】:

创建嵌入式文档,直到它们不再适合包含在一个集合中。与用户文档相关的统计信息对存储嵌入内容是 100% 有意义的。简单地说...用户个人资料有统计信息。这些统计数据对任何其他集合都没有任何意义。

如果您最终拥有一个确实需要引用的集合,因为许多不同的集合可能会引用单个文档,那么将其拆分为一个集合并使用 id 引用是有意义的。当您开始考虑在一个嵌入式文档中更改某些内容时必须更新许多其他文档时,移动到一个唯一的集合可能会很好。这样每个文档只引用一个id,它可以随时更改其文档数据。

【讨论】:

  • 补充一点,我觉得来自 DDD (en.wikipedia.org/wiki/Domain-driven_design) 的“聚合根”的概念非常适合这个讨论。如果某件事本身有意义,那肯定是该讨论中要考虑的最重要的事情之一。访问模式、嵌入式文档的生命周期(即:Uml 复合与聚合讨论)是其他几个。
猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 2021-09-03
  • 1970-01-01
  • 2011-05-15
  • 2012-04-20
  • 2012-10-07
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多