CAP 理论和BASE 特性
CAP 理论
CAP 理论:简单地说,就是对于一个分布式系统,一致性(Consistency)、可用性和分区容忍性三个特点最多只能三选二。
- 一致性(Consistency):是指系统在执行了某些操作后仍处于一个一致的状态。
- 可用性(Availability):是指对数据的所有操作都有成功的返回。简言之,就是任何请求不管成功或失败都有响应。
- 分区容忍性(Partition tolerance):这一概念的前提是在网络发生故障的时候。在网络连接上,一些结点出现故障,使得原本连通的网络变成了一块一块的分区,若允许系统继续工作,那就是分区可容忍的。
ACID 理论
- 原子性(Atomicity):事务的所有操作在数据库中要么都做要么都不做。
- 一致性(Consistency):一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而遭受破坏。
- 隔离性(Isolation):一个事务的执行不能被其他事务干扰。并发事务在执行过程中可能会对同一数据进行操作,这些事务的操作应该不会相互干扰,是相互隔离的。
- 持久性(Durability):一个事务一旦提交,它对数据库的改变必须是永久的, 即使系统出现故障也是如此。
BASE 理论
由于 CAP 理论的存在,为了提高性能,出现了 ACID 的一种变种 BASE,它是一个弱一致性的理论,只要求最终一致性。
-
BA (Basically Available):基本可用
-
S (Soft state):软状态,可以理解为“无连接的”的,而与之相对应的是“面向连接”的。
- E (Eventual consistency):最终一致性,最终整个系统看到的数据是一致的。
NoSQL数据库的种类
分类 | 典型产品 | 应用场景 | 优点 | 缺点 |
---|---|---|---|---|
文档存储 | MongoDB、CouchDB | Web 应用,存储面向文档和半结构化数据 | 结构灵活,可以根据value构建索引,处理能力强 | 缺乏统一的查询语法;无事务处理能力 |
键值存储 | Redis | 内容缓存,如会话、配置、文件、参数等 | 扩展性好,灵活性强,大量操作时性能高 | 数据无结构化,通常被当成字符串或者二进制数据,通过键查询值 |
列存储 | Bigtable、HBase、Cassandra | 分布式数据存储和管理 | 可扩展性强,查找速度快,复杂性低 | 功能局限;不支持事务的强一致性 |
图存储 | Neo4j、OrientDB | 社交网络、推荐系统、专注于构建系统图谱 | 支持复杂的图形算法 | 复杂性高,只能支持一定的数据规模 |