概览
关系型数据库支持企业级应用已经有了十年之久,自从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数据库或者其他关系型的技术。
翻译到这里感觉已经大体上足够了。