MongoDB(一):NoSQL简介、MongoDB简介

1. NoSQL简介

1.1 什么是NoSQL

NoSQL(NoSQL= Not Only SQL),意即“不只仅是SQL",是一项全新的数据库理念,泛指非关系型的数据库。web

1.2 为何须要NoSQL

随着互联网web2.0网站的兴起,非关系型的数据库如今成了一个极其热门的新领域,非关系数据库产品的发展很是迅速。而传统的关系数据库在应付web2.0 网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了不少难以克服的问题,例如:算法

1.2.1 High performance-对数据库高并发读写的需求

web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,因此基本上没法使用动态页面静态化技术,所以数据库并发负载很是高,每每要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,可是应付上万次SQL写数据请求,硬盘10就已经没法承受了。其实对于普通的BBS网站,每每也存在对高并发写请求的需求,例如网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,所以这是一个至关广泛的需求。数据库

1.2.2HugeStorage-对海量数据的高效率存储和访问的需求

相似Facebook, twitter, Friendfeed 这样的SNS网站,天天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来讲,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登陆系统,例如腾讯,盛大,动辄数以亿计的账号,关系数据库也很难应付。数组

1.2.3 High Scalability && High Availability-对数据库的高可扩展性和高可用性的需求

在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server 和app server 那样简单的经过添加更多的硬件和服务节点来扩展性能和负载能力。对于不少须要提供24小时不间断服务的网站来讲,对数据库系统进行升级和扩展是很是痛苦的事情,每每须要停机维护和数据迁移,为何数据库不能经过不断的添加服务器节点来实现扩展呢?缓存

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤为是大数据应用难题。 性能优化

1.3 主流NoSQL产品

NoSQL 数据库的四大分类以下: 服务器

键值(Key-Value)存储数据库 :网络

相关产品: Tokyo Cabinet/Tyrant. Redis. Voldemort. Berkeley DB数据结构

典型应用:内容缓存, 主要用于处理大量数据的高访问负载。架构

数据模型:一 系列键值对

优点:快速查询

劣势:存储的数据缺乏结构化

列存储数据库 :

相关产品: Cassandra, HBase, Riak

典型应用:分布式的文件系统

数据模型:以列簇式存储,将同一列数据存在一块儿

优点:查找速度快,可扩展性强,更容易进行分布式扩展

劣势:功能相对局限

文档型数据库 :

相关产品: CouchDB、 MongoDB

典型应用: Web应用(与Key-Value相似,Value是结构化的)

数据模型:一系列键值对

优点:数据结构要求不严格

劣势:查询性能不高, 并且缺少统一的查询语法 

图形(Graph)数据库: 

相关数据库: Neo4J、 InfoGrid、 Infinite Graph

典型应用:社交网络

数据模型:图结构

优点:利用图结构相关算法。

劣势:须要对整个图作计算才能得出结果,不容易作分布式的集群方案。 

1.4 NoSQL特色 

在大数据存取上具有关系型数据库没法比拟的性能优点,例如: 

1.易扩展

NoSQL 数据库种类繁多,可是一个共同的特色都是去掉关系数据库的关系型特性。数据之间无关系,这样就很是容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

2.大数据量,高性能

NoSQL 数据库都具备很是高的读写性能,尤为在大数据量下,一样表现优秀。这得益于它的无关系性,数据库的结构简单。

3.灵活的数据模型

NoSQL 无需事先为要存储的数据创建字段,随时能够存储自定义的数据格式。而在关系数据库里,增删字段是一件很是麻烦的事情。若是是很是大数据量的表,增长字段简直就是一个疆梦。这点在大数据量的Web2.0时代尤为明显。

4.高可用

NoSQL 在不太影响性能的状况,就能够方便的实现高可用的架构。好比Cassandra, HBase模型,经过复制模型也能实现高可用。


综上所述,NoSQL 的非关系特性使其成为了后Web2.0时代的宠儿,助力大型Web2.0网站的再次起飞,是一项全新的数据库革命性运动。 

2. MongoDB简介

MongoDB是一个基于分布式文件存储的NoSQL数据库。

由C++语言编写,运行稳定,性能高。

旨在为WEB应用提供可扩展的高性能数据存储解决方案。

2.1 MongoDB特色

模式自由:能够把不一样结构的文档存储在同一个数据库里

面向集合的存储:适合存储JSON风格文件的形式

完整的索引支持:支持彻底索引,包含内部对象。

复制和高可用性:支持服务器之间的数据复制,支持主从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移

自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器

丰富的查询:支持丰富的表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组

快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划。

高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)

2.2 MongoDB历史 

2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。

2012年05月23日,MongoDB2.1 开发分支发布了! 该版本采用全新架构,包含诸多加强。

2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库。

2013年04月23日,MongoDB 2.4.3 发布,此版本包括了一些性能优化,功能加强以及bug修复。

2013年08月20日,MongoDB 2.4.6 发布。

2013年11月01日,MongoDB 2.4.8 发布。

……

2.3 MongoDB优势

到目前为止,MongoDB是一个新的和广泛使用的数据库。 它是一个基于文档的非关系数据库提供程序。

关系数据库具备典型的架构设计,能够显示表的数量以及这些表之间的关系,而在MongoDB中则没有关系的概念。

优势:

MongoDB 的架构较少。它是一个文档数据库,它的一个集合持有不一样的文档。

从一个到另外一个的文档的数量,内容和大小可能有差别。

MongoDB 中单个对象的结构很清淅。

MongoDB 中没有复杂的链接。

MongoDB 提供深度查询的功能,由于它支持对文档的强大的动态查询。

MongoDB 很容易扩展。

它使用内部存储器来存储工做集,这是其快速访问的缘由。

MongoDB的独特功能:

使用方便

重量轻/轻量级

比RDBMS快得多

应该在哪些场景使用MongoDB呢?

大而复杂的数据

移动和社会基础设施数据

内容管理和交付

用户数据管理

数据中心