繁体   English   中英

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

[英]What are best practices for partitioning data in MongoDB?

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

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

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

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

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

为了澄清这一点,假设我使用用户模型进行用户注册,使用博客模型进行博客等。

如果您简短地向我解释如何构造猫鼬模型,或者所有数据都应包含在一个集合中,或者一个用户应该针对不同功能使用单独的集合,那么这对我来说确实意味着很多。 而且,如果您建议使用多个集合,那么我该如何将这些集合链接在一起,并确保所有数据都保存为一个用户等。

在此先多谢!

如果将mongoDB用作REST接口的后端,则最佳实践是按资源创建集合。 例如,如果您打算拥有/api/users端点,则应该拥有users集合,并且它应该包含打算在该端点上返回的所有内容。

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

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

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

  1. 当然,您将为不同的模型创建不同的集合。 例如用户,博客,消息等。

  2. 现在是第二部分,如果我们要谈论数百万的数据。 如何对它们进行分区以实现更快的数据查找。 例如,您有1百万个用户,您将把它们放入一个大的“用户”集合中。 但是,如果您查找的名字是“ Imdad”且年龄为28岁的用户,现在查询将在单个Users集合中查找这些1M项,这将花费大量时间。

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

分片密钥生成

猫鼬碎片密钥

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM