【发布时间】:2012-02-24 09:13:15
【问题描述】:
我们正在将 MongoDB 用于新的解决方案,目前正在尝试设计最有效的数据模型以满足我们的需求,即数据项之间的关系。
我们必须在用户、项目和列表之间保持三向关系。一个用户可以有许多项目和许多列表。一个列表将有一个用户和许多项目。一个项目可以属于许多用户和许多列表。后者尤其重要——一个项目可能属于大量的列表:数千,当然也可能是数万或数十万。未来甚至可能达到数百万。我们需要能够在两个方向上导航这些关系:例如,获取列表中的所有项目或项目所属的所有列表。我们还需要通用的解决方案,以便我们可以在需要时添加更多类型的文档以及它们之间的关系。
所以似乎有两种可能的解决方案。第一个是数据库中的每个文档都有一个由 ID 数组组成的“关系”集合。因此,列表文档将有一个包含所有项目 ID 的项目的关系集合和一个具有用户单个 ID 的关系集合。在这个模型中,当一个项目属于很多很多用户或很多很多列表时,这些数组将变得非常庞大。
第二种模型需要一种新型文档,即存储每个合作伙伴的 ID 和关系名称的“关系”文档。这将存储更多数据,因此会影响磁盘空间。在 NoSQL 中解决这个问题的方法看起来也很“不自然”。
性能方面、空间方面、架构方面,哪个更好?为什么?
干杯, 马特
【问题讨论】: