在MongoDB中分区数据的最佳实践是什么?

问题描述 投票:2回答:2

我正在使用平均堆栈创建一个社交网站,我需要一些关于mongoDB和mongoose的建议。我是初创公司的一员,我们决定使用这些惊人的技术来完成我们的任务。

基本上,我需要一些建议。

目前,我已经完成了简单的CRUD创建并实现了本地护照JS。我目前在我的mongoDB中有一个名为users的集合。

我们的社交网站将拥有一个与单个用户相关的博客,市场和许多其他页面(功能)。

由于我之前从未使用过mongoDB,所以我很好奇mongoDB应该为每个用户使用一个集合还是为每个功能设置多个集合。

为了澄清它,假设我使用User模型进行用户注册,博客模型用于博客等。

如果您不久将向我解释如何构建我的猫鼬模型,如果所有数据都应该在一个集合中,或者如果一个用户应该具有不同功能的单独集合,那么这对我来说真的意味着很多。如果您推荐多个集合,我如何将这些集合链接在一起,并确保为一个用户等保存所有数据。

非常感谢提前!

node.js mongodb mongoose
2个回答
3
投票

如果您使用mongoDB作为REST接口的后端,最佳做法是在每个资源的集合上创建。例如,如果您打算使用/api/users端点,则应该拥有用户集合,并且它应该包含您要在该端点上返回的任何内容和所有内容。

如果使用节点编译服务器端模板,则结构可以更灵活。在这种情况下,上面仍然适用(因为您可能最终希望公开REST服务),但是有更多的灵活性。实际上,如果多对多样式关系是合适的,则可以更容易地将这些集合分开并在同一页面中将它们加载在一起。

顺便说一句,你提到有用户和市场。比将数据分成集合更大的问题是交易的使用。每当您打算执行数据事务时,都应该在SQL事务中执行。 MongoDB中没有交易概念。这是设计使然,因为MongoDB旨在成为一个快速,可扩展的数据存储。在这种情况下,合并SQL和noSQL数据并不是不合理的。


0
投票

我将解释分区/分为两个级别。

  1. 当然,您将为不同的模型创建不同的集合。例如用户,博客,消息等。
  2. 如果我们谈论的是数百万的数据,现在是第2部分。如何对它们进行分区以便更快地查找数据例如,您有1M个用户,您将把它们放在一个大的“用户”集合中。但是,如果您寻找名字为“Imdad”且年龄为28岁的用户,现在您的查询将查看单个“用户”集合中的这些1M项目,这将花费大量时间。

为了解决这个问题,用户集合可以通过水平分区(Users1(年龄在10-20之间),Users2(年龄在20-30之间),Users3(年龄在30-40之间))分为多个集合。现在基于您的查询谓词monggoDB将查找不同的集合。这就是MongoDB像其他SQL DB一样应用的想法。您不必显式执行查询到块集合,但mongoDB本身会处理它。

Shard key generation

Mongoose shard key

© www.soinside.com 2019 - 2024. All rights reserved.