我有两个实体。用户和项目有很多关系。我会阅读/查询
写作表现无所谓。
我应该如何存储这些数据以获得最佳性能?
user:{id:1, items:[1,2,3,4,5]}
并按项目item:{id:1, users:[1,2,3,4,5]}
ser:{id:1, items:[1,2,3,4,5]} and item:{id:1, users:[1,2,3,4,5]}
答案 0 :(得分:0)
在您的情况下,关系应该与在关系数据库中执行的方式类似地存储。您将拥有3个集合:一个用于用户,一个用于项目,以及一个关系集合,其中每个文档只有一个用户项关系。
因此,任何获取项目用户或反之亦然的查询都需要两个查询,一个是关系集合,一个是“目标”集合。这绝对是RDBMS做得更好的情况之一,但对于大多数人来说这是一个公平的权衡,如果你正确设置了MongoDB,那么两个查询应该仍然非常快。
除了增加的存储要求之外,我不建议复制数据,在理想的世界中,它会起作用,但最终可能会出现一致性问题。