首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建模式还是添加一个额外的字段?

创建模式还是添加一个额外的字段?
EN

Stack Overflow用户
提问于 2021-01-03 06:38:07
回答 2查看 122关注 0票数 2

我想存储特色产品,如员工挑选,特色产品在我的系统中,每个类别将容纳最多10个文档。我的优先级是读取性能而不是写性能,但我也希望有一个高效存储系统,我有三种方法可以做到这一点:

  1. boolean模式中创建is_bestselleris_staffpickis_bestseller字段,并对其进行查询。 我认为这是最简单的方法,但我认为这需要一个额外的查询来检查是否达到了最多10限制
  2. 创建一个包含产品ids引用的FeaturedProducts架构。 这在某种意义上是有用的,因为如果我想在功能产品中添加一些附加信息,比如一个功能产品,那么我可以简单地在这个模式中添加一个字段。检查(最多10个文档限制)也很容易。我认为这使它更具有可伸缩性,但却以性能为代价?
  3. 创建一个保存所有所需数据的FeaturedProducts架构。 我认为从性能上看,这将是最好的,但我不确定这是否是一种有效的方式存储数据。基本上,我只会复制一个产品的数据并存储它。显然,如果我必须更新产品的细节,那么我现在必须在两个地方更新它,但读写比率非常支持阅读,所以我愿意这样做,即使这将需要更多的逻辑来更新和删除产品。此外,设置最多10个文档限制也很容易。

我试着寻找一些关于特色产品的例子,但是找不到任何有用的东西。我不知道这里的最佳做法是什么,也不知道该怎么做,因此,任何帮助都是值得赞赏的。

EN

回答 2

Stack Overflow用户

发布于 2021-01-09 18:55:10

在MongoDB中建模数据时的经验法则是:

一起访问的数据应该一起存储。

记住,我认为扩展参考模式是一个很好的用例选项,下面是MongoDB博客中的一个示例。

考虑一个电子商务应用程序,其中您有用户收集,订单收集和其他.在用户和订单之间存在1-N关系的情况下,为了减少连接操作,嵌入每个订单的所有客户信息会导致大量重复的信息。

我们只复制我们经常访问的字段,而不是复制客户上的所有信息。

此模式将具有高度读取性能,因为所有信息都将存储在单个文档中,而代价是一些重复的数据,但考虑到它可以作为历史数据服务器,这并不是完全错误。

有用信息:

票数 0
EN

Stack Overflow用户

发布于 2021-01-12 03:58:12

一个潜在的解决方案是在这里使用一个索引,这样您就可以最大限度地提高查询性能。您将创建一个额外的布尔标志(正如您在第一个解决方案中指出的那样),然后用一个限制返回值数量的游标索引该查询。

要获得更多提高查询性能的方法,请查看官方的Mongo 这里。如果您想知道查询的性能有多高,可以使用Mongo的explain()方法获得基准测试(更多信息这里)并比较各种方法。

祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65547281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档