Performance 在mongodb中索引多对多关系的最佳方法是什么?
我有两个实体。具有多对多关系的用户和项目。我将阅读/查询Performance 在mongodb中索引多对多关系的最佳方法是什么?,performance,mongodb,indexing,Performance,Mongodb,Indexing,我有两个实体。具有多对多关系的用户和项目。我将阅读/查询 按用户id列出的项目-50%的时间 按项目id列出的用户-50%的时间 写作和表演没关系 我应该如何存储这些数据以获得最佳性能 用户:{id:1,项:[1,2,3,4,5]}并按项索引 类似于项目,即项目:{id:1,用户:[1,2,3,4,5]} 仅按id重复数据和索引,即user:{id:1,items:[1,2,3,4,5]}和item:{id:1,users:[1,2,3,4,5]} 在您的情况下,关系的存储方式应该与在关系数据库
用户:{id:1,项:[1,2,3,4,5]}
并按项索引项目:{id:1,用户:[1,2,3,4,5]}
ser:{id:1,items:[1,2,3,4,5]}和item:{id:1,users:[1,2,3,4,5]}
在您的情况下,关系的存储方式应该与在关系数据库中的存储方式类似。您将有3个集合:一个用于用户,一个用于项目,以及一个关系集合,其中每个文档只有一个用户项目关系 因此,任何获取项目用户的查询或反之亦然,都需要两个查询,一个查询关系集合,另一个查询“目标”集合。这无疑是RDBMS做得更好的情况之一,但对于大多数人来说,这是一个公平的权衡,如果MongoDB设置正确,两个查询应该仍然非常快
除了增加的存储需求外,我不建议复制数据,在理想情况下,复制数据是可行的,但最终可能会出现一致性问题。如果不知道应用程序的工作原理,很难在这方面做出最佳区分;你用的最多的是什么?你的应用程序是如何工作的?你的书在哪里?您的写入在哪里?正如我所写的,我将同时使用按用户id和按项目id的读取(查询)。书写性能不符合要求——这是非常罕见的操作。