我开始阅读MongoDB(这让我非常兴奋)因为我知道他们的一个缺点是自我解释缺乏关系。特别是当涉及到双方的大型或不断增长,多对多的关系。
而且,当我读到避免在某个文档中不断增长的数组的最佳方法是尝试通过创建文档桶然后引用桶来避免它(这不能保证完全防止过度生长)。或者创建引用第三个多对多文档的两个文档。
由于我无法找到这个困境的最终答案,或者至少有一个人不会几年,所以有人可以解释这是不是死路一条(如果项目使用了一些大的(有史以来)增长)多对多的关系)我应该切换到RDBMS?
答案 0 :(得分:3)
这取决于您的用例。
主要问题是你真的知道为什么要首先使用MongoDB吗?希望,原因不是因为这种趋势。 RDBMS仍然具有相关性并且有自己的用例。对于某些应用程序,RDBMS是一种不用的方法。
现在回到你关于多对多关系的原始问题。正如您已经研究过的那样,有很多方法可以在MongoDB中建模这些关系。因此,它不会将MongoDB本身取消作为数据库的资格。例如,当您插入或删除多对多关系的记录时,是否需要事务性或参照完整性检查?如果答案是肯定的,那么MongoDB可能不适合您的情况。
答案 1 :(得分:0)
当我第一次开始研究MongoDB时,这个确切的问题在我脑海中浮现,在寻找答案的过程中,我读到了一些非常有趣的内容(希望我能为你找到这个链接,但不幸的是我不这样做。)
想到一个现实世界的问题,你有多对多的关系,一直在增长?可能会有非常特殊的例子。
我们可以说很多学生都注册了很多课程。现在一个课程可能由100名学生注册,但肯定学生不会注册100门课程,所以你可以在学生收藏中为注册的课程ID保留一个数组字段..
让我们深入了解并说有一群超级优秀的学生在这种情况下实际注册了100门课程,阵列领域可能不是一个可行的解决方案。然后 ?一个只有student_id和course_id的集合怎么样?这甚至也存在于RDBMS世界中。所以可用的变通方法应该足以为最复杂的场景找到并设计优化的解决方案。