在mongodb中索引多对多关系的最佳方法是什么?

时间:2012-01-06 22:47:28

标签: performance mongodb indexing

我有两个实体。用户和项目有很多关系。我会阅读/查询

  1. 按用户ID列出的项目 - 50%的时间
  2. 用户按项目ID - 50%的时间
  3. 写作表现无所谓。

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

    1. user:{id:1, items:[1,2,3,4,5]}并按项目
    2. 编制索引
    3. 类似于item:{id:1, users:[1,2,3,4,5]}
    4. 等项目
    5. 仅按ID(即ser:{id:1, items:[1,2,3,4,5]} and item:{id:1, users:[1,2,3,4,5]}
    6. )复制数据和索引

1 个答案:

答案 0 :(得分:0)

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

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

除了增加的存储要求之外,我不建议复制数据,在理想的世界中,它会起作用,但最终可能会出现一致性问题。