NoSQL(NoSQL = Not Only SQL ),意即"不只仅是SQL",泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了不少难以克服的问题,而非关系型的数据库则因为其自己的特色获得了很是迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤为是大数据应用难题,包括超大规模数据的存储。html
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系web
- 在大数据量下,NoSQL数据库具备很是高的读写性能sql
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序mongodb
关系型数据库对应的是结构化数据,数据表都预先定义告终构(列的定义),结构描述了数据的形式和内容。这一点对数据建模相当重要,虽然预约义结构带来了可靠性和稳定性,可是修改这些数据比较困难。数据库
关系型数据库经过结构化查询语言来操做数据库(就是咱们一般说的SQL)。SQL支持数据库CURD操做的功能很是强大,是业界的标准用法。json
关系型数据库是表格式的,所以存储在表的行和列中。他们之间很容易关联协做存储,提取数据很方便。架构
关系型数据库经过结构化查询语言来操做数据库(就是咱们一般说的SQL)。SQL支持数据库CURD操做的功能很是强大,是业界的标准用法。并发
数据库要一直处于一致的状态,事务的运行不会改变数据库本来的一致性约束。nosql
事务在英文中是transaction,和现实世界中的交易很相似,它有以下四个特性:分布式
原子性很容易理解,也就是说事务里的全部操做要么所有作完,要么都不作,事务成功的条件是事务里的全部操做都成功,只要有一个操做失败,整个事务就失败,须要回滚。
好比银行转帐,从A帐户转100元至B帐户,分为两个步骤:1)从A帐户取100元;2)存入100元至B帐户。这两步要么一块儿完成,要么一块儿不完成,若是只完成第一步,第二步失败,钱会莫名其妙少了100元。
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库本来的一致性约束。
例如现有完整性约束a+b=10,若是一个事务改变了a,那么必须得改变b,使得事务结束后依然知足a+b=10,不然事务失败。
所谓的独立性是指并发的事务之间不会互相影响,若是一个事务要访问的数据正在被另一个事务修改,只要另一个事务未提交,它所访问的数据就不受未提交事务的影响。
好比如今有个交易是从A帐户转100元至B帐户,在这个交易还未完成的状况下,若是此时B查询本身的帐户,是看不到新增长的100元的。
持久性是指一旦事务提交后,它所作的修改将会永久的保存在数据库上,即便出现宕机也不会丢失。
- 表明着不只仅是SQL
- 没有声明性查询语言
- 没有预约义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
海量(Volume)
多样(Variety)
实时(Velocity)
高并发
高可扩
高性能
在计算机科学中, CAP定理(CAP theorem), 又被称做 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来讲,不可能同时知足如下三点:
一致性(Consistency) (全部节点在同一时间具备相同的数据)
可用性(Availability) (保证每一个请求无论成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统
的继续运做)
CAP理论的核心是:一个分布式系统不可能同时很好的知足一致性,可用性和分区容错性这三个需求,最多只能同时较好的知足两个。
所以,根据 CAP 原理将 NoSQL 数据库分红了知足 CA 原则、知足 CP 原则和知足 AP 原则三 大类:
类型 |
部分表明 |
特色 |
列存储 |
Hbase Cassandra Hypertable
|
顾名思义,是按列存储数据的。最大的特色是方便存储结构化和半结构化数据,方便作数据压缩,对针对某一列或者某几列的查询有很是大的IO优点。 |
文档存储 |
MongoDB CouchDB
|
文档存储通常用相似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段创建索引,实现关系数据库的某些功能。 |
key-value存储 |
Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis
|
能够经过key快速查询到其value。通常来讲,存储无论value的格式,照单全收。(Redis包含了其余功能) |
图存储 |
Neo4J FlockDB
|
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,并且设计使用不方便。 |
对象存储 |
db4o Versant
|
经过相似面向对象语言的语法操做数据库,经过对象的方式存取数据。 |
xml数据库 |
Berkeley DB XML BaseX
|
高效的存储XML数据,并支持XML的内部查询语法,好比XQuery,Xpath。 |
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即便没法作到强一致性,但每一个应用均可以根据自身业务特色,采用适当的方式来使系统达到最终一致性。接下来看一下BASE中的三要素:
基本可用是指分布式系统在出现不可预知故障的时候,容许损失部分可用性----注意,这毫不等价于系统不可用。好比:
(1)响应时间上的损失。正常状况下,一个在线搜索引擎须要在0.5秒以内返回给用户相应的查询结果,但因为出现故障,查询结果的响应时间增长了1~2秒
(2)系统功能上的损失:正常状况下,在一个电子商务网站上进行购物的时候,消费者几乎可以顺利完成每一笔订单,可是在一些节日大促购物高峰的时候,因为消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面
软状态指容许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的总体可用性,即容许系统在不一样节点的数据副本之间进行数据同步的过程存在延时
最终一致性强调的是全部的数据副本,在通过一段时间的同步以后,最终都可以达到一个一致的状态。所以,最终一致性的本质是须要系统保证最终数据可以达到一致,而不须要实时保证系统数据的强一致性。
总的来讲,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它彻底不一样于ACID的强一致性模型,而是经过牺牲强一致性来得到可用性,并容许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不一样业务单元和组件对数据一致性的要求是不一样的,所以在具体的分布式系统架构设计过程当中,ACID特性和BASE理论每每又会结合在一块儿。
http://www.javashuo.com/article/p-vvhrarqh-ht.html
http://www.runoob.com/mongodb/nosql.html
http://www.javashuo.com/article/p-glkgyote-nn.html
http://www.javashuo.com/article/p-aoyhfmhn-dh.html