Nosql与Sql对比

Catalogue
  1. 1. 关系型数据库发展史
  2. 2. 关系型数据库遵循ACID规则
  3. 3. 什么是NoSQL?
  4. 4. 为什么使用NoSQL ?
  5. 5. RDBMS vs NoSQL
  6. 6. NoSQL 简史
  7. 7. CAP定理(CAP theorem)
  8. 8. NoSQL的优点/缺点
  9. 9. BASE
  10. 10. ACID vs BASE
  11. 11. NoSQL 数据库分类
  12. 12. 引用

关系型数据库发展史

在现代的计算系统上每天网络上都会产生庞大的数据量。
这些数据有很大一部分是由关系数据库管理系统RDMBS)来处理。
1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,
这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,
今天它是结构化数据存储在网络和商务应用的主导技术。

关系型数据库遵循ACID规则

事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
1、A (Atomicity) 原子性
2、C (Consistency) 一致性
3、I (Isolation) 独立性
4、D (Durability) 持久性

什么是NoSQL?

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的
数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。
这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

为什么使用NoSQL ?

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

RDBMS vs NoSQL

RDBMS NoSQL
高度组织化结构化数据 代表着不仅仅是SQL
结构化查询语言(SQL) (SQL) 没有声明性查询语言
数据和关系都存储在单独的表中。 没有预定义的模式
数据操纵语言,数据定义语言 键 - 值对存储,列存储,文档存储,图形数据库
严格的一致性 最终一致性,而非ACID属性
基础事务 CAP定理
高性能,高可用性和可伸缩性

数据发展形势

NoSQL 简史

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
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最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS

CAP定理(CAP theorem)

在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem),
它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些
AP定理

NoSQL的优点/缺点

优点 缺点
高可扩展性 没有标准化
分布式计算 有限的查询功能(到目前为止)
低成本 最终一致是不直观的程序
架构的灵活性,半结构化数据
没有复杂的关系

BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。
BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:
Basically Availble --基本可用
Soft-state --软状态/柔性事务。 “Soft state” 可以理解为"无连接"的, 而 “Hard state” 是"面向连接"的
Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。

ACID vs BASE

ACID BASE
原子性(Atomicity) 基本可用(Basically Available)
一致性(Consistency) 软状态/柔性事务(Soft state)
隔离性(Isolation) 最终一致性 (Eventual consistency)
持久性 (Durable)

NoSQL 数据库分类

类型 部分代表 特点
列存储 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。

引用

记录点滴,成为更好的自己。 — weizhuo.ma