何时应该使用MongoDB而不是关系型数据库

3

我在Udemy上学习了几门与NodeJS/Express、ReactJS/Redux相关的课程,其中一些是MERN STACK。我非常喜欢这些课程,但唯一让我困惑的是教师们并没有真正解释为什么选择MongoDB。在学习这些课程之前,我一直使用PostgreSQL或MariaBD作为所有项目的持久层。现在我在所有这些课程中都使用MongoBD,但不知道在什么情况下它是最好的选择。所有教师都说,由于数据以json和json数组的形式存储,因此易于解析,并且与JavaScript自然兼容,就像任何JSON格式一样。我真的很想了解在给定项目要求的情况下,使用Mongo的技术原因,而不是仅仅因为教师这样做。


这个问题的答案在这个视频中: https://www.youtube.com/watch?v=KWOSGVtHWqA - undefined
Mongodb只是一种基于文档的NoSQL数据库。 - undefined
4个回答

5

我熟悉 SQL 和 MongoDB 两种数据库。

MongoDB

From my experience MongoDB is best suitable when you follow agile methodologies 
wherein you don't really know what your JSON object will have to contain.

SQL

SQL will be best suitable where JSON object is not going to be changed, like 
for bank projects, where you know the exact format of JSON which is never going 
to be changed.

DIFF

Why I am saying this is, whenever we need to add some extra fields or need to 
link some fields with primary, foreign keys it would be pain and wouldn't know 
what could go wrong.

Wherein in MongoDB if you need to reference some field you will just need to 
add key ref with that field and you are done.

MongoDB

MongoDB would be great when one of your key from one JSON object is to be 
referenced to mutiple JSON object by just adding that field name in ref (ref: 
'user')

请给这个答案投票,以便有需要的人能找到这个答案,并了解MongoDB何时最适合他们使用。

4

我的看法是,当:

  • 关系完整性(数据完整性)至关重要时
  • 数据经常更新时
  • 实体之间存在清晰和/或强大的关系时

SQL更受青睐。

MongoDB更适合于:

  • 水平扩展/分片
  • 在生产中复制SQL数据以避免昂贵的查询(一些替代方案可能更好)

我会说,当不确定时,请使用SQL。从SQL迁移到NoSQL比反过来要容易得多,当你改变主意时。


1

从个人经验来看,当项目类似于社交媒体需要维护帖子、评论、点赞、屏蔽和解除屏蔽等功能时,我会使用 SQL。希望您能理解。

MongoDB 也可以用于上述项目类型,但是其聚合操作会变得非常麻烦且难以阅读。

MongoDB 适用于所有项目,除了社交媒体类项目。同样,这是我的经验所得。


1
不太确定我是否理解为什么你说“社交媒体”类似的项目不合适?对于帖子文档来说,它可以很好地适应文档模型... { text: "post test", comments: [ { by: "bob", "MongoDB is awesome!"}], likedBy:[ "bob" ] } - undefined
好的,让我给你举个例子。帖子会有评论,这些评论可以被点赞等等。现在假设用户B正在对帖子P1进行评论。作为用户A,当我看到这个帖子时,我应该能看到用户B的评论,这是正常情况。但是如果有屏蔽和解除屏蔽功能,那么作为用户A,如果我屏蔽了用户B,我就不应该看到用户B的评论,还有其他很多情况。 - undefined
你能不能在从数据库中提取出来的帖子文档中,只是简单地围绕阻塞的工作方式应用业务逻辑到评论上? - undefined
好的,所以任何用户都可以屏蔽评论,因此每个评论还需要存储所有屏蔽该评论的用户及其屏蔽时间。是的,这可以在MongoDb上实现,但我说过它的聚合函数会变得繁琐。 - undefined

0
当你拥有大量无模式数据时。 当你的数据和用户将无限增长,并且你需要可扩展的云数据库解决方案时。 当你需要在CRUD的某些方面获得更高的性能提升时。 当你的软件堆栈基于JS时。 你可以在这个YouTube视频中查看其他原因https://youtu.be/K8xsuFgCRkU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接