nosql&数据库CAP
2018-12-04 本文已影响0人
虫儿飞ZLEI
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:不要搞分区,就搞一台机器。
三类:

- 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之间通信和调用,对外提供服务和组内协作。
-
集群:不同的多台服务器上面部署相同的模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。