1. NoSQL简介

1.1 什么是NoSQL

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

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产品

MongoDB(一):NoSQL简介、MongoDB简介_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呢?

大而复杂的数据

移动和社会基础设施数据

内容管理和交付

用户数据管理

数据中心