MongoDB和MySQL对比

概览

关系型数据库最初是为企业应用程序而设计,自从MySQL在1995年发行以来,一直是企业和个人首选的数据库,直到在近些年,大数据的兴起,非关系数据库技术出现,像MongoDB,非常适合这种新型的应用,以及替换关系型的结构的数据库

What is MySQL?

MySQL是一个个人开源关系型的数据库管理系统(RDBMS),现在已经由Oracle发行和提供技术支持,像其它关系型数据库一样,MySQL存储数据在表中,使用结构化的查询语言(SQL)访问数据库,MySQL需要你预定义表的结构,数据表字段之间的关系在数据表中,关系信息也可以存储在分离的数据表中,使用这种方式实现数据的最小化,也就是减少数据的冗余

What is MongoDB?

MongoDB是MongoDB公司开发开源的数据库,MongoDB数据存储在像JSON结构的文档中,可以通过MongoDB查询语言快速查找相关信息,MongoDB使用动态的schemas,也就是说你可以不用预先定义结构就可以创建记录,比如某个字段是的类型是其它的值,你可以改变这个记录(在MongoDB中叫文档)的结构,可以很简单添加和删除字段,数据模型可以给你构建数据层次关系的能力,比如数组或者其它数据结构,文档在集合中不必具有相同的字段和数据的非规范化是很常见的,MongoDB的设计也考虑到成高用性和可伸缩性,比如开箱即用和
自动分片

术语和概念

MongoDB很多概念和MySQL类似

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

特性比较

像MySQL一样,MongoDB也提供丰富的特性,也有自己的查询语言,高可用的二级索引(包括文本搜索和地理位置),强大,高聚合数据分析框架,比关系型数据库有着更加丰富的数据类型和可扩展性

                     MySQL          MongoDB
Rich Data Model        No             Yes  
Dyamic Schema          No             Yes  
Typed Data             Yes            Yes  
Data Locality          No             Yes  
Field Updates          Yes            Yes  
Easy for Programmers   No             Yes  
Complex Transactions   Yes            No  
Auditing               Yes            Yes  
Auto-Sharding          No             Yes  

查询语言

Both MySQL and MongoDB have a rich query language.
MySQK和MongoDB都有查询语言

MySQL  
INSERT INTO users (user_id, age, status) VALUES("bcd001", 45, "A")

MongoDB  
db.users.insert({  
    user_id: "bcd001", 
    age: 45, 
    status: "A"
})

MySQL  
SELECT * FROM users

MongoDB  
db.users.find()

MySQL  
UPDATE users SET status = "C" WHERE age > 25

MongoDB  
db.users.update(  
    { age: { $gt: 25 } },
    { $set: { status: "C" } },
    { multi: true }
)

为什么使用MongoDB替代MySQL?

各种规模的企业都在采用MongoDB,因为这使他们更快地构建应用程序和处理不同的数据类型,更有效地管理大型应用。

MongoDB的面向对象编程简化开发,更加接近现代高级语言,使用MongoDB可以在代码中不使用ORM层来操作关联表

MongoDB’s有灵活的数据模型,意味可以应对业务需求的发展

MongoDB也可跨数据中心的方式扩展,相对关系数据库MongoDB提供更高的可用性和更好的可扩展性,随着数据增长,MongoDB可以不停机和不用修改应用程序进行扩展,通常MySQL,需要工程师做更多工作

什么时候使用MySQL会更合适?

现代的应用都必须是灵活,可扩展系统,像MongoDB,当然也有其它使用关系型数据的案例,比如像MySQL会更加合适,应用程序复杂,多事务(比如复式记账系统)就是个很好的示例,MongoDB不适合这类型的应用

一个具体示例就是旅游预订系统,复杂的核心预订引擎部分运行在MySQL,其它部分更适合整合在MongoDB,比如社交网络,会话管理

MongoDB和MySQL一起使用?

有很多MongoDB和MySQL混合开发的案例,在某些案例中,按照场景选择合适工具来工作,比如,许多经济系统中会组合MySQL和MongoDB一起使用,产品目录,包括多个产品有不同的属性,就很适合MongoDB灵活数据模型,另一方面,像checkout system的复杂性使用MySQL或者其它关系型数据库更合适

Thank

Mongodb

你的欣赏是我最大的动力

Yanxiong Huang

My name is Yanxiong Huang. graduated from Nanyang middle school.Love Linux,familiar with Node.js,Docker,Serverless... and more Web technology.Contact Me:QQ 31356617;Email:huangaynxiong2013@gmail.com

guangzhou,china http://www.myfreax.com

乐在分享