初探NoSQL

NoSQL的意思是“不仅仅是SQL”,是目前流行的“非关系型数据库”的统称。常见的NoSQL数据库如:Redis、CouchDB、MongoDB、HBase、Cassandra等。

背景

出现NoSQL的原因:为解决在Web2.0时代出现的三高要求:

  1. 对数据库高并发读写的需求
  2. 对海量数据的高效率存储和访问的需求
  3. 对数据库的高可扩展性和高可用性的需求
  4. 而RDB里面的一些特性,在web2.0里面往往变得不那么重要,比如:
    1. 数据库事务一致性
    2. 数据库的实时读写
    3. 复杂的SQL查询,特别是多表关联查询

CAP定理

又被称作布鲁尔定理(Eric Brewer)它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  1. 强一致性(Consistency):系统在执行某项操作后数据状态仍然处于一致,例如在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性。
  2. 可用性(Availability):每一个操作总是能够在一定的时间内返回结果
  3. 分区容错性(Partition tolerance):单个节点故障不应导致整个系统崩溃,也就是说尽管网络在节点之间丢弃(或延迟)任意数量的消息,但是系统继续操作。

根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类

  1. CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB。
  2. CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库。
  3. AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL。

BASE(Basically Available,Soft-state,Eventual consistency)

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

  1. 基本可用(Basically Available):系统能够基本运行并一直提供服务。
  2. 软状态(Soft-state):系统不要求一直保持强一致状态。
  3. 最终一致性(Eventual consistency):系统需要在某一时刻后达到一致性要求。

NoSQL的特点

优点

  1. 扩展简单方便,尤其是水平横向扩展(纵向扩展是指用更强的机器;横向扩展是指把数据分散到多个机器)。
  2. 读写快速高效,多数都会映射到内存操作。
  3. 成本低廉,用普通机器,分布式集群即可。
  4. 数据模型灵活,没有固定的数据模型。

缺点

  1. 不提供对SQL的支持
  2. 对事务操作的支持较弱