爱你所爱,行你所行,听从你心,无问西东。

NoSQL

NoSQL (Not Only SQL),意为 “不仅仅是SQL”。仅仅是一个概念,泛指非关系型数据库。传统的关系型数据库在处理 web2.0 网站,特别是超大规模和高并发的 SNS(社交网络) 类型和 web2.0 纯***站 已经显得力不从心,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。

Why NoSQL

今天我们可以通过第三方平台(Google,Facebook等)可以很方便地访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍增加。这些类型的数据存储不需要固定的模型,同时需要易于横向扩展,那 SQL 数据库已经不适合这些应用了,NoSQL 数据库的发展却能很好的处理这些数据。

RDBMS vs NoSQL

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

特点

对于 NoSQL 并没有一个明确的范围和定义,但是他们都普遍存在下面一些共性特征:

  • 易扩展

    NoSQL 数据库种类繁多,但有一个共同特点就是去除关系型数据库的关系型特性。无形之间,在架构的层面带来的可扩展能力

  • 大数据量,高性能

    NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀,得益于它的无关系型,数据库结构简单

  • 灵活的数据模型

    NoSQL 无需实现为要存储的数据建立字段,随时都可以存储自定义的数据格式。而在关系型数据库中,增删字段是一件非常麻烦的事情

  • 高可用

    NoSQL 在不太影响性能的情况,就可以方便地实现高可用的架构。比如 Cassandra,HBase模型,通过赋值模型也能实现高可用

分类

分类 举例 应用场景 数据模型
键值(key-value)数据库 redis 内容缓存 key 指向 value 的键值对,通常用 hash table 实现
列存储数据库 Cassandra,HBase 分布式文件系统 列簇式存储,同一列数据存在一起
文档型数据库 MongoDB web应用 与key-value类似,value为结构化数据
图形数据库 Neo4J 社交网络,推荐系统 图结构,专注于构建关系图谱

体系框架

NoSQL 框架体系 整体分为四层,由下至上分为数据持久层(data persistence),整体分布层(data distribution model),数据逻辑模型层(data logical model),接口层(interface),层次之间相辅相成,协调工作。

  • 数据持久层

    定义了数据的存储形式,主要包括 基于内存基于硬盘内存和硬盘接口订制可插拔 四种形式。

    基于内存形式的数据存取速度最快,但可能会造成数据丢失。

    基于硬盘的数据存储可能保存很久,但存取速度相对于内存形式较慢。

    内存和硬盘相结合的形式,结合了前两种形式的优点,保证了速度又保证了数据不丢失。

    订制可插拔则保证了数据存取具有较高的灵活性

  • 数据分布层

    定义了数据是如何分布的,相对于关系型数据库,NoSQL可选的机制比较多,主要有三种形式:一是 CAP 支持,可用于水平扩展。二是多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行。三是动态部署支持,可以在运行的集群中动态地添加或删除节点

  • 数据逻辑层

    表述了数据的逻辑变现形式,与关系型数据库相比,NoSQL在逻辑表现形式上相当灵活,主要有四种形式:一是键值模型,这种模型在表现形式上比较单一,但却有很强的扩展性。二是列式模式,这种模型相比于键值模型能够支持较为复杂的数据,但扩展性较差。三是文档模型,这种模型对于复杂数据的支持和扩展性都有很大优势。四是图模型,这种模型的使用场景不多,通常是基于图数据结构的数据定制的。

  • 接口层

    接口层为上层应用提供了方便的数据调用接口,提供了选择远多于关系型数据库。接口层提供了五种选择:Rest,Thrift,Map/Reduce,Get/Put,特定语言 API。使得应用程序和数据的交互更加方便。

NoSQL 分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。

CAP定理(CAP theorem)

在计算机科学中,CAP定理,也被称作 布鲁尔定理,它指出对于一个分布式计算机系统来说,不可能同时满足以下三点:

  • 一致性(Consistency):所有节点在同一时间具有相同的数据
  • 可用性(Availability):保证每个请求不管成功或失败都有响应
  • 分隔容忍(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作

CAP 理论的核心是:一个分布式系统不可能很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA原则,满足 CP 原则和 满足 AP 原则三大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一点

BASE

BASE 是 NoSQL 数据库通常对可用性及一致性 (CP)的弱要求原则:

  • Basically Availble - 基本可用
  • soft-state - 软状态 / 柔性事务
  • Eventual Consistency - 最终一致性,也是 ACID 最终目的

最终一致性

最终一致性要求系统中数据副本最终能够一致,而不需要实时保证数据副本一致。例如,银行系统中的非实时转账操作,允许 24 小时内用户账户的状态在转账前后是不一致的,但 24 小时后账户数据必须正确。

最终一致性是 BASE 原理的核心,也是 NoSQL 数据库的主要特点,通过弱化一致性,提供系统的可伸缩性,可靠性和可用性。而对于大多数 WEB 应用,其实并不需要强一致性,因此牺牲一致性换区高可用性,是多数分布式数据库产品的方向。

参考

http://c.biancheng.net/view/6495.html

http://gitbook.net/nosql.html