MongoDB对某些用例的适用性?

时间:2013-04-02 08:28:58

标签: mongodb nosql

我正在考虑将MongoDB用于Web应用程序,但我已经读过在某些情况下不推荐使用它。我想知道我的项目是否会成为其中一种情况。

以下是我系统中实体的简要概述 -

  • 有些用户具有标准用户详细信息属性
  • 每个用户可以拥有多个收据,收据只能有一个用户
  • 收据包含许多产品
  • 产品具有标准产品详细信息属性
  • 用户可以有很多朋友,每个朋友都是用户自己
  • 产品用户可以提供评论
  • 会有一个像stackoverflow这样的信誉系统,用户可以获得积分和徽章

正如您所看到的,有许多实体彼此之间存在各种关系。数据完整性很重要。这种模式是否适合MongoDB?

1 个答案:

答案 0 :(得分:5)

您的数据似乎非常关系,而不是面向文档。

您还指出数据完整性是一项重要要求(我假设您的意思是指不同实体之间的参照完整性)。当实体未存储在同一文档中时,很难保证它们在MongoDB中的完整性。此外,MongoDB不能强制执行任何约束(字段值的唯一性除外)。

你似乎也总体上存在一种非常关系的思维模式,这将使你难以利用MongoDB如何使用它。

由于这些原因,我建议你坚持使用关系数据库。

您之所以考虑使用MongoDB,可能是因为您听说它很快并且可以很好地扩展。是的,它速度很快,并且可以很好地扩展,但仅仅因为它不强制引用完整性,并且因为它不执行表连接。当你需要这些功能并因此必须找到难以理解的变通方法来模拟它们时,MongoDB将不再那么快。