gpt4 book ai didi

mongodb - 所有产品的单一大集合与每个产品类别的单独集合

转载 作者:行者123 更新时间:2023-12-04 08:12:24 26 4
gpt4 key购买 nike

我是 NoSQL 的新手,我正在尝试找出为我的数据库建模的最佳方法。我将在项目中使用 ArangoDB,但我认为如果使用 MongoDB,这个问题也成立。

数据库将存储 12 类产品。每个类别预计包含数百或数千种产品。产品也将不断添加/删除。

所有产品都会有许多通用字段,但每个类别也会有独特的字段/对数据的不同限制。

请记住,在某些情况下我需要同时查询所有类别,例如在所有类别中搜索产品,而在其他情况下我只需要查询一个类别。

我应该创建一个集合“Product”并使用一个字段来指示类别,还是应该为每个类别创建一个单独的集合?

我已经阅读了很多与这个想法相关的问题(1 个集合与许多)但除了“它取决于”之外我还没有得出结论。

所以我的问题是:在这个特定的用例中,就性能和速度而言,哪个选项是最佳的,多个集合与单个集合 + 分片?

如有任何帮助,我们将不胜感激。

最佳答案

正如您提到的,您需要使用您的数据和用例。你会有更好的画面。

一些需要做出的决定如下。

  1. 确定您近期将拥有的文件数量。如果你一年有 100 万份文件,那么尝试至少 300 万份数据

  2. 确定所需索引的数量。

  3. 决定每秒写入、读取的次数。

  4. 确定每个类别的文档大小。

  5. 确定查询模式。

根据需求的一些输入

  1. 如果您有更多的写入和更多的索引,那么由于需要更新多个索引,单个整体收集会变慢。

  2. 由于每个类别都有不同的字段集,您可以尝试使用多个集合。有 $unionWith合并来自多个集合的数据。但是要检查性能它完全取决于上述决定。注意这个open issue还有。

  3. 如果您决定采用整体式收集,请推迟分片。一旦发现查询速度变慢,就实现此方法。

  4. 如果您在同一个文档上有多个写入,写入将按顺序执行。它也会减慢您的阅读速度。

  5. 当从集合中清除更多数据时,考虑回收磁盘空间。多个集合在这里很有用。


  1. 迫使我建议单体集合的原因是我需要同时查询所有类别。您可能需要添加更多类别,但将所有类别组合在一个响应中不会提高性能。

  2. 由于您实际上没有像 RDBMS 中那样的连接用例,因此您可以从模型的角度使用单一整体集合。我怀疑你可能有一个连接 key 。

如果我的任何观点不正确,请告诉我。

关于mongodb - 所有产品的单一大集合与每个产品类别的单独集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65886635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com