nosql&数据库CAP

1.nosql:非关系型数据库

1.1分类

  • 键值存储数据库:特定的键指向特定的数据,如redis、Voldemor、Oracle BDB。
  • 列存储数据库:一个键指向多个列,用来应对分布式存储的海量数据,HBase、Riak。
  • 文档型数据库:MongoDB、CouchDB
  • 图形数据库:比如用来存储人际关系网络,Neo4J、InfoCrid、Infinite Graph

2.CAP

2.1 CAP是什么

  • C(Consistency强一致性):系统在执行过某项操作后仍然处于一致的状态。直接的说就是更新操作执行成功后所有的用户都应该读到最新的值。用户A改了某个数据的值,用户B去读数据,必须要读到A修改后的值。

  • A(Availability可用性):每一个操作总是能够在一定的时间内返回结果。简单的说就是,用户访问数据库必须有回应,数据库不能卡死或崩掉。

  • P(Partition tolerance分区容错性):指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信)分离的系统也能够正常运行。简单的说,数据库中的服务器节点需要相互通信,保证彼此的数据都是一致的。当某一个节点和其他的节点断开了,他依然要能够运行(这时它本地保存的数据也许就和其他的节点慢慢的不一样了)

2.2 CAP理论

一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个要求,最多只能同时较好的满足其中的两个。

为什么不能同时满足3个呢?因为在逻辑上就会矛盾。
比如:
某一个数据库节点s1,由于网络分片导致s1和其他节点之间所有的通讯都断开了,用户A去更新数据库中的数据X,然后用户B去从s1中读取数据X的值(按照P的要求,s1需要可以继续运行),这时候读到的数据X就不会是最新的了,就无法满足C的要求。

此时,可以选择:

  • 放弃C:不要强一致性,数据就不要最新的。
  • 放弃A:数据库暂时不给返回数据X的值,等到s1恢复了通信,数据X一致了以后再应答。
  • 放弃P:不要搞分区,就搞一台机器。

三类:

6262743-bca0b6793760abb0.png
CAP
  • CA-单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强。传统Oracle、mysql数据库。
  • CP-满足一致性,分区容错的系统,通常可用性不是特别高。redis、mongodb
  • AP-满足可用性,分区容错性的系统,通常可能对一致性要求低。Tokyo Cabinet、SimpleDB、couchDB、Riak。

3. ACID&BASE

3.1 传统SQL的ACID:

传统的SQL数据库的事务通常都是支持ACID的强事务机制:

  • A代表原子性,即在事务中执行多个操作是原子性的,要么事务中的操作全部执行,要么一个都不执行;
  • C代表一致性,即保证进行事务的过程中整个数据加的状态是一致的,不会出现数据花掉的情况;
  • I代表隔离性,即两个事务不会相互影响,覆盖彼此数据等;
  • D表示持久化,即事务一但完成,那么数据应该是被写到安全的,持久化存储的设备上(比如磁盘)

3.2 nosql中的BASE:

BASE其实就是下面三个术语的缩写:

  • 基本可用(Basically Available)
  • 软性事务(Soft state)
  • 最终一致(Eventually consistent)

番外:分布式&集群

  • 分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过RPC/RMI之间通信和调用,对外提供服务和组内协作。

  • 集群:不同的多台服务器上面部署相同的模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

参考文章:http://www.noobyard.com/article/p-tclzyzmt-rm.html