NoSQL是针对海量非关系型数据的数据库系统。其全称存在争议,一般认为是Not Only SQL,意思是不仅仅是SQL,但是Martin Fowler认为,NoSQL不是英文Not Only SQL的缩写,因为如果是,那应该是NOSQL 而不是NoSQL。不过名称并不重要,NoSQL的实质就是非关系型数据库。它和传统关系数据库的区别在于:NoSQL不使用SQL作为查询语言。其数据存储可以不需要固定的表格模式,也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征,就是scalability很好。

今天我们可以通过第三方平台[如:Google,Facebook等]可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL关系数据库已经不适合这些应用了,NoSQL数据库的发展也却能很好的处理这些大的数据。

NoSQL主要有四种存储方式:键值存储[Key-Value],列存储[Column],文档型存储[Document]和图存储[Graph]。

  1. 键值存储:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/Value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/Value就显得效率低下了。

  2. 列存储:在列存储中键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。列存储通常是用来应对分布式存储的海量数据,它的查找速度快,可扩展性强。使用存储的数据库有:Cassandra,HBase,Riak。

  3. 文档型存储:文档型存储的灵感是来自于Lotus Notes办公软件的。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构。使用文档型存储的数据库有:CouchDB,MongoDb。

  4. 图存储:图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。利用图结构相关算法。比如最短路径寻址,N度关系查找等。但是很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。如:Neo4J,InfoGrid,Infinite Graph。

因此,NoSQL数据库在以下的这几种情况下比较适用:1.数据模型比较简单; 2.需要灵活性更强的IT系统; 3.对数据库性能要求较高; 4.不需要高度的数据一致性; 5.对于给定key,比较容易映射复杂值的环境。

下面是RDBMS和NoSQL之间的对比

RDBMS

  • 结构化查询语言(SQL)

  • 高度组织化结构化数据

  • 数据和关系都存储在单独的表中

  • 数据操纵语言,数据定义语言

  • 严格的一致性,遵循ACID理论

  • 一般指处理基础事务

NoSQL

  • 没有声明性查询语言

  • 结构化和不可预知的数据

  • 键值对存储,列存储,文档存储,图形数据库

  • 没有预定义的模式

  • 最终一致性,而非ACID属性,遵循CAP和ACID理论

  • 高性能,高可用性和可伸缩性

MySQL和NoSQL都有各自的特点和使用的应用场景。关系数据库关注在关系上,NoSQL关注在存储上。NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。灵活的数据模型NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。大数据量,高性能NoSQL数据库都具有非常高的读写性能,尤其在大数据量下, 同样表现优秀。


本文参考https://zh.wikipedia.org/wiki/NoSQL,http://www.runoob.com/mongodb/nosql.html,http://baike.baidu.com/view/2677528.htm