0

我刚开始使用 MongoDB,我很困惑用列表属性构建对象模型。我有一个与关注者和关注对象相关的用户模型,它们是用户 ID 列表。所以我可以想到一些对象模型结构来表示这种关系。

  1. 嵌入式文档。追随者和追随者嵌入到用户模型中。这样,在许多 Web 框架中,每个请求都会生成一个“current_user”对象,并且序列化/反序列化 Follower 和 Follower 列表属性是额外的开销,因为我们很少在大多数请求中使用这些属性。我们可以在生成“current_user”时排除这些属性。但是,我们需要在对它进行任何更新之前再次获取完整的“current_user”对象。

  2. 在用户模型中使用参考属性。我们可以拥有 Followers 和 Followers 对象模型本身,不是嵌入的,而是保存对 User 对象的引用。

  3. 在追随者和追随者模型中使用参考属性。我们可以将用户 ID 保存在 Follower 和 Follower 属性中以供以后查询。

可能还有其他一些方法可以做到这一点,更容易使用或更好的性能。我的问题是:
设计具有一些相关列表属性的模型的建议方法是什么?

4

1 回答 1

1

对于来自 SQL 世界的人(比如我自己)来说,学习 MongoDB 最难的事情之一就是新的模式设计风格。在 SQL 世界中,一切都进入第三范式。人们开始认为只有一种正确的方式来设计他们的架构,因为通常有一个。

在 MongoDB 世界中,没有一种最好的模式设计。更准确地说,在 MongoDB 中,模式设计取决于应用程序将如何访问数据。

为了为 MongoDB 设计一个好的模式,您需要回答以下关键问题:

  • 你有多少数据?
  • 你最常见的操作是什么?您主要是插入新数据、更新现有数据还是进行查询?
  • 您最常见的查询是什么?
  • 您最常见的更新是什么?
  • 您期望每秒执行多少次 I/O 操作?

如果您正在考虑一对多的对象关系,这些问题可能会出现以下情况。

在 SQL 中,您只需创建一对具有主键/外键关系的主/从表。在 MongoDB 中,您有多种选择:可以嵌入数据,可以创建链接关系,可以复制和非规范化数据,或者可以使用混合方法。

正确的方法将取决于有关应用程序用例的大量细节。

以下是有关 MongoDB 模式设计的一些很好的通用参考资料。

MongoDB 演示文稿:

这里有几本关于 MongoDB 模式设计的书,我认为你会发现它们很有用:

以下是一些示例架构设计:

于 2012-09-13T22:48:54.810 回答