mongoDB(1)——前序(NoSQL)mysql
MongoDB是非关系型数据库的一种。在进入mongoDB的学习以前,咱们先来了解一下非关系型数据库(NoSQL)。web
1、NoSQL的产生sql
随着web2.0的兴起,特别是超大规模和高并发的网站对数据库提出了进一步的需求(大数据量引起的一系列问题),而关系型数据库面对这些新的需求,显得有些力不从心,例如:mongodb
1. 面对数据库高并发读写的需求,关系数据库应付上万次sql查询还勉强顶的住,可是应付上万次sql写数据请求,硬盘IO就没法承受了。由于关系型数据库各个数据之间存在关联,为了进行join处理,不得不把数据存储在同一个服务器内,这样不利用数据分散,不具有写扩展性。数据库
2. 面对海量数据的高效率存储和访问的需求,在一张上万条甚至上亿条记录的表里进行sql查询,效率是极其低下的。关系型数据库是使用专门的sql语言进行数据读取的,它须要对sql语言进行解析,同时还有对表的锁定和解析这样的额外开销。服务器
3. 面对数据库的高可扩展性和高可用性的需求,由于关系型数据库的存储是创建在关系模型基础上的,当关系模型发生变更时,对于已经存储了大量数据的关系型数据库来讲,是很是麻烦的事情。架构
在新需求面前,关系数据库遇到了难以克服的障碍,而与此同时,web2.0对关系数据库的不少主要特性却每每要求不那么高,例如:并发
1. 对数据库事务一致性的需求,不少web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。数据库设计
2. 对数据库的写实时性和读实时性需求,不少网站并不须要插入数据后当即显示。高并发
3. 对复杂的SQL查询,特别是多表关联查询的需求,任何大数据量的web系统,都很是忌讳多个大表的关联查询,以及复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种状况的产生。每每更多的只是单表的主键查询,以及单表的简单条件分页查询,sql的功能被极大的弱化了。
关系数据库在这些愈来愈多的应用场景下显得不那么合适了,为了解决这些问题,非关系型数据库应运而生。
2、NOSQL优势
1. 大数据量,高性能
NoSQL数据库都具备很是高的读写性能,尤为在大数据量下,一样表现优秀。这得益于它的无关系性,数据库结构简单,这样,能够利用经过增长主服务器来实现数据库的读扩展性。而上面也说过了,面对大数据量的写入问题,关系型数据库仍是存在压力的。
2. 灵活的数据模型
在关系型数据库中,每一张表就是一个关系模式的映射,当关系模型发生改变时,哪怕是很小的变动,都是很麻烦的,甚至还须要停机或者下降服务级别。
而NoSQL的存储是模式自由的,无需事先为要存储的数据创建字段,随时能够存储自定义的数据格式,数据之间能够没有任何格式限制。
3. 易扩展
因为NoSQL数据库所存储数据之间的无关系性,使数据库易于扩展,并且,在架构的层面上也带来了可扩展的能力。
3、NoSQL与关系型数据库设计理念的比较
关系型数据库是创建在关系模型基础上的,借助于集合代数等数学概念和方法来处理数据库中的数据。其中每一张表就是一个关系模式的映射,每条记录字段的组成都同样,即便不是每条记录都须要全部的字段,但数据库也会为每条记录分配全部的字段。这样的结构便于表与表之间的关联。
NoSQL数据库是模式自由的,存储的数据不局限于固定的结构,数据之间能够没有任何关系。这样的结构显得更加灵活,也减小了一些时间和空间的开销。
4、总结
NoSQL数据库的出现,弥补了关系型数据库在某些方面的不足,但从功能上讲,NoSQL的几乎全部功能,在关系数据库上都能知足,因此,选择NoSQL的缘由并不在功能上,而是两者都有各自的特色和应用场景,二者的紧密结合将会给web2.0的数据库发展带来新的思路,让关系型数据库关注在关系上,非关系型数据关注在存储上。