Fork me on GitHub

NoSQL简介

简介

本文主要参考菜鸟教程,原博文清晰明了,可以自行前往,写在这里是以手连心加深印象,同时把这些信息抓回来作为以博客为载体的个人技能图的重要组成部分。

NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。

现代计算系统上每天网络上都会产生庞大的数据量,这些数据很大一部分是由关系数据库RDBMS处理,实践证明关系模型非常适合于客户端服务器编程,是结构化数据存储在网络和商务应用的主导技术。

NoSQL是另一种数据组织形式,早期提出至09年趋势高涨,NoSQL相关的非关系型数据库在存储处理当前互联网快速产生,日益庞大,形式多样的数据方面有巨大优势,发展迅速。

NoSQL简史

NoSQL一词最早出现在1998年,是Carlo Strozzi开发的一个轻量,开源,不提供SQL功能的关系数据库;

2009年,有一次关于分布式开源数据库的讨论,有人再次提出了NoSQL的概念,主要指非关系型,分布式,不提供ACID的数据库设计模式;

2009年,亚特兰大举行的”no:sql(east)”讨论会是一个里程碑,其口号”select fun, profit from real_world where relational = false”,因此对NoSQL最普遍的解释是”非关系型的”,强调key-values stores和文档数据库的优点,而不是单纯的反对RDBMS。

时至今日,各种NoSQL数据库已经是大数据领域各种数据分布式存储的基石。

NoSQL数据库分类

类型 代表数据库 特点
列存储 Hbase/Cassandra/Hypertable 按列存储,方便存储结构化和半结构化数据,方便做数据压缩,在某一列或者某几列的查询中有巨大的IO优势
文档存储 MongoDB/CouchDB 用类似json的格式存储文档,可以对某些字段建立索引,实现关系数据库的某些功能
key-value存储 Redis/MemcacheDB 存储的是key-value对,不管value的格式,可以通过key快速查询value
图存储 Neo4J/FlockDB 图形关系的最佳存储方案
对象存储 db4o/Versant 通过对象的方式存储数据,用类似面向对象语言的语法操作数据库
xml数据库 BaseX/Berkeley XML DB 高效存储XML数据,支持XML内部查询语法,比如XQuery,Xpath

RDBMS和NoSQL的规则

ACID

关系型数据库有一个很重要的概念:事务(transaction),类似现实中的交易,遵循ACID:

A-Atomicity 原子性

事务要么不做,要么做完,事务成功的条件是事务里所有操作均成功完成,只要有一个操作失败,整个事务便失败回滚。
比如银行转账,A账户转B账号,分为两个步骤:
1.从A账号取出100元
2.往B账号转入100元
银行的数据库处理该事务,要么两步一起完成,事务提交,任何一步出问题事务都会回滚,如果第一步未完成那么事务失败,第二步未完成,B没收到钱但A少了100元,事务会回滚到未转账状态。

C-Consistency 一致性

数据库一直处于一致的状态,事务的运行不会改变原本的一致性约束。
例如某表上有完整性约束”a + b = 10”,如果一个事务改变了a,那么b必定会发生改变,使得事务结束后依然满足该约束,否则事务失败

I-Isolation 独立性

并发的事务之间不会互相影响,如果A事务访问的数据正在被B事务修改,只要B事务未提交,A访问的数据就不会受到影响

D-Durability 持久性

一旦事务提交,所有的修改将会永久保存在数据库上,即使宕机也不会丢失,除非进行数据库恢复

BASE

Basically Available, Soft-state, Eventually Consistent

Basically Availble –基本可用

Soft-state –软状态/柔性事务。 “Soft state” 可以理解为”无连接”的, 而 “Hard state” 是”面向连接”的

Eventual Consistency –最终一致性 最终一致性, 也是是 ACID 的最终目的。

CAP

计算机科学中, CAP定理 揭示了分布式系统的本质,并给出了设计准则,它指出任何分布式计算系统不能同时满足
一致性(Consistency) - 所有节点在同一时间具有相同的数据
可用性(Availability) - 保证每个请求都有响应,无论响应成功还是失败
分区容错性(Partition tolerance) - 系统中任意信息的丢失或失败不会影响系统的继续运作

CA without P,如果不要求P(分区),那么CA(强一致性和可用性)是可以保证的,但分区是始终存在的问题,因此CA系统更多的是允许分区后各子系统依然保证CA。

CP without A,如果不要求A,相当于每个请求都需要server之间强一致,而P会导致时间无限延长,因此CP也是可以保证的,很多传统的数据库分布式事务都属于这种模式

AP without C,要高可用并允许分区,则需放弃一致性,一旦分区发生,节点间可能失去联系,为了高可用,每个节点只能用本地数据提供服务,而这会导致全局数据的不一致性,众多NoSQL数据库都属于此类

因此,根据CAP原理将数据库分成满足CA,CP,AP的三大类:

为什么用NoSQL

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语言(SQL) (SQL)
  • 数据和关系都存储在单独的表中。
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID属性
  • 非结构化和不可预知的数据
  • CAP定理
  • 高性能,高可用性和可伸缩性

优点:

1.高可扩展性

2.分布式计算

3.低成本

4.架构灵活,可以处理半结构化/非结构化数据

5.不用处理复杂的关系模型

缺点:

1.没有关系型数据库发展得那么成熟

2.查询功能有限

3.是一种最终一致性的系统,它们为了高的可用性牺牲了一部分的一致性

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