MongoDB对特定用例的适用性?

MongoDB对特定用例的适用性?,mongodb,nosql,Mongodb,Nosql,我正在考虑将MongoDB用于web应用程序,但我已经了解到有些情况下不建议使用它。我想知道我的项目是否属于这种情况 下面是我的系统中实体的简要概述- 存在具有标准用户详细信息属性的用户 每个用户可以有多个收据,一个收据只能有一个用户 收据上有许多产品 产品具有标准的产品详细信息属性 用户可以有很多朋友,每个朋友本身就是一个用户 用户可以对产品进行评审 将会有一个像stackoverflow这样的声誉系统,用户可以在这里获得积分和徽章 正如您所看到的,有许多实体彼此之间有各种关系。数据完整性

我正在考虑将MongoDB用于web应用程序,但我已经了解到有些情况下不建议使用它。我想知道我的项目是否属于这种情况

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

  • 存在具有标准用户详细信息属性的用户
  • 每个用户可以有多个收据,一个收据只能有一个用户
  • 收据上有许多产品
  • 产品具有标准的产品详细信息属性
  • 用户可以有很多朋友,每个朋友本身就是一个用户
  • 用户可以对产品进行评审
  • 将会有一个像stackoverflow这样的声誉系统,用户可以在这里获得积分和徽章

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

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

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

总体而言,您似乎有一个非常相关的思维模式,这将使您很难使用MongoDB

出于这些原因,我建议您坚持使用关系数据库


您首先考虑使用MongoDB的原因可能是因为您听说它速度快,而且扩展性好。是的,它速度很快,而且伸缩性很好,但这只是因为它不强制引用完整性,也因为它不执行表联接。当您需要这些功能,因此必须找到难看的变通方法来模拟它们时,MongoDB将不再那么快。

写入/读取的频率有多高?将来您是否需要扩展到一台机器之前?根据问题的当前详细程度,我想说MongoDB和SQL数据库都适合非常频繁的写入和读取。来自用户移动设备和web浏览器的写入,每隔几秒钟,这些新数据应捆绑在一起,并被推回到所有连接的设备,即,将有近实时的更新发送给所有用户。可伸缩性也很重要。接下来,我可能需要处理成百上千的连接客户端的能力。facebook可以通过MySQL轻松处理这一点,甚至更多,我相信MongoDB也可以。我认为你花了太多时间担心错误的事情。听起来你应该更担心APE/推拉技术、web服务器技术和网络基础设施等,而不是数据库。做一些测试,你会很快找到适合你的数据库,没有一个数据库比另一个更具可伸缩性,“因为它是web规模的”。从您的问题场景来看,大多数数据库都可以很好地适应