我习惯使用像MySQL或PostgreSQL这样的关系数据库,并结合使用Symfony,RoR或Django等MVC框架,我觉得它很有用.
但是最近我听说很多关于MongoDB的非关系型数据库,或者引用官方定义,
一个可扩展,高性能,开源,无架构,面向文档的数据库.
我真的很感兴趣,我希望了解下一个项目的所有选项,并选择最好的技术.
在哪些情况下使用MongoDB(或类似数据库)比使用"经典"关系数据库更好?MongoDB与MySQL的优势一般是什么?或者至少,为什么它如此不同?
如果你有指向文档和/或示例的指针,它也会有很大的帮助.
以下是MongoDB构建Web应用程序的一些优点:
基于文档的数据模型.存储的基本单元类似于JSON,Python字典,Ruby哈希等.这是一个能够容纳数组和其他文档的丰富数据结构.这意味着您通常可以在单个实体中表示一个构造,该构造需要多个表才能在关系数据库中正确表示.如果您的数据是不可变的,这尤其有用.
深度查询能力.MongoDB支持使用基于文档的查询语言对文档进行动态查询,该语言几乎与SQL一样强大.
没有架构迁移.由于MongoDB是无模式的,因此您的代码定义了您的模式.
水平可扩展性的明确途径.
你需要阅读更多关于它的内容并与它一起玩以获得更好的想法.这是一个在线演示:
http://try.mongodb.org/
有许多优点.
例如,您的数据库模式将更具可伸缩性,您不必担心迁移,编写代码会更愉快...例如,这是我的模型代码之一:
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这样的东西可能没什么意义.这一切都是为了找到合适的工具.
有关阅读的更多内容,我建议您查看" 为什么我认为Mongo是数据库Rails对框架的影响 "或mongodb网站上的这篇文章.要激动,如果你说法语,请看一下这篇文章,解释如何从头开始设置MongoDB.
编辑:我差点忘了告诉你关于这个railscast由瑞安.这很有趣,让你想立即开始!
无模式的优点是你可以转储你的负载,没有人会抱怨它,或说它是错误的.
它也意味着无论你在其中倾倒什么,在你这样做之后仍然完全没有意义.
有人会说这是一个严重的劣势,有些则不会.
关系数据库具有完善的模式这一事实的结果是,它具有一套完善的扩展谓词,这使我们能够将意义附加到数据库中记录的内容,以及哪些是这也是我们这样做的必要先决条件.
如果没有完善的模式,没有扩展谓词,并且没有扩展预设,用户就无法从其中填充的内容中获得任何意义.