Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在mongodb中索引多对多关系的最佳方法是什么?_Performance_Mongodb_Indexing - Fatal编程技术网

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列出的项目-50%的时间
  • 按项目id列出的用户-50%的时间
  • 写作和表演没关系

    我应该如何存储这些数据以获得最佳性能

  • 用户:{id:1,项:[1,2,3,4,5]}
    并按项索引
  • 类似于项目,即
    项目:{id:1,用户:[1,2,3,4,5]}
  • 仅按id重复数据和索引,即u
    ser:{id:1,items:[1,2,3,4,5]}和item:{id:1,users:[1,2,3,4,5]}

  • 在您的情况下,关系的存储方式应该与在关系数据库中的存储方式类似。您将有3个集合:一个用于用户,一个用于项目,以及一个关系集合,其中每个文档只有一个用户项目关系

    因此,任何获取项目用户的查询或反之亦然,都需要两个查询,一个查询关系集合,另一个查询“目标”集合。这无疑是RDBMS做得更好的情况之一,但对于大多数人来说,这是一个公平的权衡,如果MongoDB设置正确,两个查询应该仍然非常快


    除了增加的存储需求外,我不建议复制数据,在理想情况下,复制数据是可行的,但最终可能会出现一致性问题。

    如果不知道应用程序的工作原理,很难在这方面做出最佳区分;你用的最多的是什么?你的应用程序是如何工作的?你的书在哪里?您的写入在哪里?正如我所写的,我将同时使用按用户id和按项目id的读取(查询)。书写性能不符合要求——这是非常罕见的操作。