翻译于 https://www.mongodb.com/compare/mongodb-mysql?jmp=docs

概览

关系型数据库支持企业级应用已经有了十年之久,自从1995年MySQL释出,它已经成为最流行而低成本的选择。但是,在近几年存储以及不同类型数据的爆炸性增长,非关系型数据库,像是MongoDB,现行于市,满足新应用的需求。MongoDB既被用于新的应用,也被用于替代旧的关系型基础设施,或者在原来的基础上增加新的功能。

什么是MySQL?

MySQL是一个流行的开源的关系型数据库管理系统(RDBMS),由Oracle公司开发,分发,以及提供支持。就像是其他的关系型系统,MySQL通过tables(表)来存储数据,使用结构查询语言(SQL)来管理数据库。在MySQL,你预先定义了你的数据库schema,这个schema基于你的需求,以及设置规则来管理你的tables之间的关系。在MySQL,相关联的信息可能被存储在分离的table中,但是通过JOIN操作来关联。以这种方式,数据复制是最小化的。

什么是MongoDB?

MongoDB是一个开源的数据库,由MongoDB公司开发。MongoDB以像是JSON样式的文档保存数据,因此,在结构上可以保持多样化。为了快速的查询,通过MongoDB查询语句,相关联的数据被一起保存。MongoDB使用动态schema,意味着你可以不用定义表格,不用定义域,以及他们的数据类型,而直接创建记录。你可以修改记录(我们称之为文档)的结构,只需要简单的添加新的域,或者删除已经存在的某一个。这个数据模型使得你能够更轻松的去展现分等级的关系,保存数组,以及其他更复杂的结构。在一个集合中的文档,不需要有一个相同的域的集合,数据的反规格化是很常见的。MongoDB也为高可用以及高扩展性做了相关设计,包括开箱即用的数据复制以及自动分片。

术语以及概念

在MySQL中许多概念可以类比到MongoDB。这个表格列出了一些在每个系统中常见的概念

MySQL MongoDB
Table Collection
Row Document
Column Field
Joins Embedded documents, linking

特性比较

像是MySQL,MongoDB提供了一系列丰富的特性以及实用性,而不仅仅是提供简单的键-值存储。MongoDB有一个查询语言,高实用性的第二索引(包括文字搜索以及地理位置的查询),一个用于数据分析的强大的框架集成。通过MongoDB,在已经扩展的情况下,你仍然可以在许多不同类型的数据中使用这些特性,而MySQL不行。

MySQL MongoDB
丰富的数据模型
动态的数据表
数据类型
地理位置数据
域更新
开发者友好
复杂的事务
审计
自动分片

查询语言

MySQL与MongoDB都有一个丰富的查询语言;一个全面的陈述,可以在MongoDB文档中看到。

为什么使用MongoDB而不是MySQL?

任何大小的组织都应该使用MongoDB,因为它可以让创建应用更加快捷,处理多种多样的数据结构,以及在扩展时更加有效的管理应用。

在MongoDB上面进行开发是很简单的。因为,MongoDB的文档是可以很自然的联系到现代的面向对象的语言。MongoDB删除了复杂的ORM,即对象关系连接层。这个连接层一般把关系型数据库的数据转换成可编程的对象。

MongoDB的灵活数据模型也意味着,你的数据结构可以和你的商业模型一同进化。例如,schema在MySQL上如果出现改动,经常是以星期为计数单位,而在MongoDB上,只需要几个小时就好了。

MongoDB内建可扩展性,通过分布式的数据中心。相较于MySQL,MongoDB提供了更高一级的数据的可用性以及扩展性,这是MySQL所不能达到的。当你的开发环境以数据的存储以及吞吐量为瓶颈的时候,MongoDB可以无停机的扩展,以及不需要修改你的应用。相比之下,扩展MySQL经常需要重要的,特定的工程师来进行工作。百度从MySQL迁移到MongoDB来支持他日益增长的商务信息,中国互联网服务巨人,通过MongoDB集群,现在支持着100多个应用,以及管理了1PB多的数据。

有哪些使用MongoDB的用户案例?

MongoDB是一个多用途的数据库,可以被用到各种使用案例中。那些最出名的案例包括:单一浏览,物联网,移动,实时分析,个人,目录,以及内容管理系统。

什么时候MySQL更好一些?

当大多数系统需要一个灵活的可扩展的系统,像是MongoDB的时候,仍然有一些地方使用MySQL更好一些。

应用需要复杂的多行的事务(比如,一个双重认证的借书系统)将会是一个很好的例子。MongoDB不是为了替代那些使用关系型数据库以及SQL的常规应用。

一个更加具体的例子是,一个在旅游预订系统背后的预订引擎,它包括典型的复杂的事务。当预订引擎放MYSQL上面的时候,那些与用户相关的——为内容提供服务,与社交进行聚合,管理sessions的部分,最好使用MongoDB来进行替代。

MongoDB和MySQL能够一起工作吗?

有许多将MongoDB与MySQL混合开发的例子。在一些案例中,选择重要的工具进行工作是必要的。例如,许多电商应用使用MongoDB与MySQL的混合。商品目录,那些包括许多不同种商品,且拥有许多不同属性的例子,就是MongoDB利用其数据灵活性的好去处。从另一个角度说,结算系统,包括复杂逻辑,最好是使用MySQL数据库或者其他关系型的技术。


翻译到这里感觉已经大体上足够了。