ref:http://www.runoob.com/mongodb/nosql.htmlhtml
http://www.javashuo.com/article/p-ylkaihuw-ge.htmlmysql
百度百科中:NoSQL,泛指非关系型的数据库。中文名:非关系型数据库,外文名:NoSQL=Not Only SQL。web
看 Wikipedia中:A NoSQL (originally referring to "non SQL" or "non relational") database provides a mechanism for storage and retrieval of data which is modeled in means other than the tabular relations used in relational databases.redis
NoSQL(最初指的"非 SQL"或"非关系")数据库提供了一种机制用于存储和检索模型中的数据,不一样于关系数据库中使用的表格关系的方式。sql
再看Wiki中参考的NoSQL终极指南(nosql-database.org)中说的:NoSQL DEFINITION:Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable.mongodb
NoSQL的定义:下一代数据库主要是解决一些要点:非关系型,分布式的,开放源码和支持横向扩展。数据库
The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more. So the misleading term "nosql" (the community now translates it mostly with "not only sql") should be seen as an alias to something like the definition above. 设计模式
初衷是现代网络规模的数据库。该运动始于2009年初,并正在迅速增加。一般都支持的特性(共同特征),如:无架构开放架构(不须要预约义模式),易于复制,简单的API,最终一致/ 基础(不支持ACID特性),支持海量数据存储。因此,误导性术语“的NoSQL”(如今社会把它翻译大多为“不只是SQL”),应被视为相似于上面的定义的别名。api
NoSQL最近几年才火起来,而且快速增加,那么它从何时开始有的呢?安全
Such databases have existed since the late 1960s, but did not obtain the "NoSQL" moniker until a surge of popularity in the early twenty-first century。
早啦,从60年代后期这样的数据库已经存在,但并无取得“NoSQL”的绰号。
只是之前的应用场景更适合使用关系型的数据库,因此NoSQL类型的数据库不被大多数人须要,不被大多数人所知。
NoSQL一词最先出现于1998年,它是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系型数据库(他认为,因为NoSQL悖离传统关系数据库模型,所以,它应该有一个全新的名字,好比“NoREL”或与之相似的名字)。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的“no:sql(east)”讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。所以,对NoSQL最广泛的解释是“非关系型的”,强调键值存储和文档数据库的优势,而不是单纯地反对关系型数据库。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了不少难以克服的问题,而非关系型的数据库则因为其自己的特色获得了很是迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤为是大数据应用难题。
今天咱们能够经过第三方平台(如:Google,Facebook等)能够很容易的访问和抓取数据。用户的我的信息,社交网络,地理位置,用户生成的数据和用户操做日志已经成倍的增长。咱们若是要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
社会化关系网:
Wikipedia 页面 :
分布式系统(distributed system)由多台计算机和通讯的软件组件经过计算机网络链接(本地网络或广域网)组成。
分布式系统是创建在网络之上的软件系统。正是由于软件的特性,因此分布式系统具备高度的内聚性和透明性。
所以,网络和分布式系统之间的区别更多的在于高层软件(特别是操做系统),而不是硬件。
分布式系统能够应用在不一样的平台上如:Pc、工做站、局域网和广域网上等。
可靠性(容错) :
分布式计算系统中的一个重要的优势是可靠性。一台服务器的系统崩溃并不影响到其他的服务器。
可扩展性:
在分布式计算系统能够根据须要增长更多的机器。
资源共享:
共享数据是必不可少的应用,如银行,预订系统。
灵活性:
因为该系统是很是灵活的,它很容易安装,实施和调试新的服务。
更快的速度:
分布式计算系统能够有多台计算机的计算能力,使得它比其余系统有更快的处理速度。
开放系统:
因为它是开放的系统,本地或者远程均可以访问到该服务。
更高的性能:
相较于集中式计算机网络集群能够提供更高的性能(及更好的性价比)。
故障排除:
故障排除和诊断问题。
软件:
更少的软件支持是分布式计算系统的主要缺点。
网络:
网络基础设施的问题,包括:传输问题,高负载,信息丢失等。
安全性:
开放系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。
RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 表明着不只仅是SQL
- 没有声明性查询语言
- 没有预约义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
在计算机科学中, CAP定理(CAP theorem), 又被称做布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来讲,不可能同时知足如下三点:
CAP理论的核心是:一个分布式系统不可能同时很好的知足一致性,可用性和分区容错性这三个需求,最多只能同时较好的知足两个。
所以,根据 CAP 原理将 NoSQL 数据库分红了知足 CA 原则、知足 CP 原则和知足 AP 原则三大类:
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来讲的优点在于简单、易部署。可是若是DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库
这部分数据库一般是用来应对分布式存储的海量数据。键仍然存在,可是它们的特色是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,并且它同第一种键值存储相相似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,好比JSON。文档型数据库可 以看做是键值数据库的升级版,容许之间嵌套键值。并且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其余行列以及刚性结构的SQL数据库不一样,它是使用灵活的图形模型,而且可以扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),所以进行数据库查询须要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.
所以,咱们总结NoSQL数据库在如下的这几种状况下比较适用:一、数据模型比较简单;二、须要灵活性更强的IT系统;三、对数据库性能要求较高;四、不须要高度的数据一致性;五、对于给定key,比较容易映射复杂值的环境。
优势:
缺点:
BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。
CAP理论的核心是:一个分布式系统不可能同时很好的知足一致性,可用性和分区容错性这三个需求,最多只能同时较好的知足两个。
BASE是NoSQL数据库一般对可用性及一致性的弱要求原则:
ACID | BASE |
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 软状态/柔性事务(Soft state) |
隔离性(Isolation) | 最终一致性 (Eventual consistency) |
持久性 (Durable) |
1.存储方式
关系型数据库是表格式的,所以存储在表的行和列中。他们之间很容易关联协做存储,提取数据很方便。而Nosql数据库则与其相反,他是大块的组合在一块儿。一般存储在数据集中,就像文档、键值对或者图结构。
2.存储结构
关系型数据库对应的是结构化数据,数据表都预先定义告终构(列的定义),结构描述了数据的形式和内容。这一点对数据建模相当重要,虽然预约义结构带来了可靠性和稳定性,可是修改这些数据比较困难。而Nosql数据库基于动态结构,使用与非结构化数据。由于Nosql数据库是动态结构,能够很容易适应数据类型和结构的变化。
3.存储规范
关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以免重复,得到精简的空间利用。虽然管理起来很清晰,可是单个操做设计到多张表的时候,数据管理就显得有点麻烦。而Nosql数据存储在平面数据集中,数据常常可能会重复。单个数据库不多被分隔开,而是存储成了一个总体,这样整块数据更加便于读写
4.存储扩展
这多是二者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提升处理能力,要使用速度更快的计算机。由于数据存储在关系表中,操做的性能瓶颈可能涉及到多个表,须要经过提高计算机性能来克服。虽然有很大的扩展空间,可是最终会达到纵向扩展的上限。而Nosql数据库是横向扩展的,它的存储自然就是分布式的,能够经过给资源池添加更多的普通数据库服务器来分担负载。
5.查询方式
关系型数据库经过结构化查询语言来操做数据库(就是咱们一般说的SQL)。SQL支持数据库CURD操做的功能很是强大,是业界的标准用法。而Nosql查询以块为单元操做数据,使用的是非结构化查询语言(UnQl),它是没有标准的。关系型数据库表中主键的概念对应Nosql中存储文档的ID。关系型数据库使用预约义优化方式(好比索引)来加快查询操做,而Nosql更简单更精确的数据访问模式。
6.事务
关系型数据库遵循ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),而Nosql数据库遵循BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state )、最终一致性(Eventual Consistency))。因为关系型数据库的数据强一致性,因此对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,而且易于回滚事务。而Nosql数据库是在CAP(一致性、可用性、分区容忍度)中任选两项,由于基于节点的分布式系统中,很难所有知足,因此对事务的支持不是很好,虽然也可使用事务,可是并非Nosql的闪光点。
7.性能
关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能很是差,面对海量数据的时候效率很是低。而Nosql存储的格式都是key-value类型的,而且存储在内存中,很是容易存储,并且对于数据的 一致性是 弱要求。Nosql无需sql的解析,提升了读写性能。
8.受权方式
关系型数据库一般有SQL Server,Mysql,Oracle。主流的Nosql数据库有redis,memcache,MongoDb。大多数的关系型数据库都是付费的而且价格昂贵,成本较大,而Nosql数据库一般都是开源的。
如今已经有不少公司使用了 NoSQL: