首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与关系数据库相比,使用像MongoDB这样的无模式数据库有什么优势?

问与关系数据库相比,使用像MongoDB这样的无模式数据库有什么优势?
EN

Stack Overflow用户
提问于 2010-01-22 21:13:08
回答 8查看 60.3K关注 0票数 95

我习惯于使用关系数据库,如MySQL或PostgreSQL,并与诸如Symfony、RoR或Django等MVC框架相结合,我认为它工作得很好。

但最近我听说了很多关于MongoDB的消息,它是一个非关系数据库,或者,引用official definition的话说,

是一个可伸缩的、高性能的、开源的、无模式的、面向文档的数据库。

我真的对处于边缘状态很感兴趣,希望了解下一个项目的所有选择,并选择最好的技术。

在哪些情况下,使用MongoDB (或类似的数据库)比使用“经典”关系数据库更好?总的来说,与MySQL相比,MongoDB的优势是什么?或者至少,为什么会有这么大的不同?

如果您有指向文档和/或示例的指针,它也会很有帮助。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-01-22 23:27:02

以下是MongoDB在构建web应用程序时的一些优势:

  1. 基于文档的数据模型。存储的基本单元类似于JSON、Python字典、Ruby散列等。这是一个丰富的数据结构,能够保存数组和其他文档。这意味着您通常可以在单个实体中表示需要多个表才能在关系数据库中正确表示的构造。如果您的数据具有immutable.
  2. Deep查询能力,这一点尤其有用。MongoDB支持使用基于文档的查询语言对文档进行动态查询,该语言的功能几乎与SQL一样强大。
  3. 无架构迁移。由于MongoDB是无架构的,因此您的代码定义了您的架构。
  4. 通向水平可伸缩性的清晰路径。

您需要阅读更多关于它的内容,并尝试使用它来获得更好的想法。这是一个在线演示:

http://try.mongodb.org/

票数 58
EN

Stack Overflow用户

发布于 2010-01-22 21:21:21

这样做有很多好处。

例如,您的数据库模式将更具可伸缩性,您将不必担心迁移,代码将更易于编写……例如,下面是我的模型的一个代码:

代码语言:javascript
复制
class Setting
  include MongoMapper::Document

  key :news_search, String, :required => true
  key :is_availaible_for_iphone, :required => true, :default => false

  belongs_to :movie
end

添加一个键就是添加一行代码!

从长远来看,还会出现其他优势,比如更好的可伸缩性和速度。

,但请记住,非关系型数据库并不是比关系型数据库更好的.如果您的数据库有很多关系和规范化,那么使用像MongoDB这样的东西可能没有什么意义。这一切都是为了找到合适的工具来完成这项工作。

要阅读更多内容,我建议您查看mongodb网站上的"Why I think Mongo is to Databases what Rails was to Frameworks“或this post。如果你会说法语,那就看看解释如何从头开始设置MongoDB的this article吧。

编辑:我几乎忘了告诉你Ryan的this railscast。它非常有趣,让你想马上开始!

票数 23
EN

Stack Overflow用户

发布于 2010-01-23 07:03:16

无模式的优点是,您可以转储其中的任何负载,并且没有人会有任何理由抱怨它,或者说它是错误的。

这也意味着,无论你在其中倾倒什么,在你这样做之后,它仍然是完全没有意义的。

一些人会认为这是一个严重的劣势,另一些人则不会。

事实上,关系数据库具有良好的模式,这是因为它具有一组良好的扩展谓词,这些谓词允许我们将含义附加到数据库中记录的内容,这也是我们这样做的必要前提。

没有良好建立的模式,就没有扩展谓词,没有扩展谓词,用户就无法理解其中所填充的内容。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2117372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档