事务在英文中是 transaction, 和现实世界中的交易很类似, 它有如下四个特性:
原子性很容易理解, 也就是说事务里的所有操作要么全部做完, 要么都不做, 事务成功的条件是事务里的所有操作都成功, 只要有一个操作失败, 整个事务就失败, 需要回滚。
比如银行转账, 从 A 账户转 100 元至 B 账户, 分为两个步骤: 1) 从 A 账户取 100 元; 2) 存入 100 元至 B 账户。这两步要么一起完成, 要么一起不完成, 如果只完成第一步, 第二步失败, 钱会莫名其妙少了 100 元。
一致性也比较容易理解, 也就是说数据库要一直处于一致的状态, 事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束 a+b=10, 如果一个事务改变了 a, 那么必须得改变 b, 使得事务结束后依然满足 a+b=10, 否则事务失败。
所谓的独立性是指并发的事务之间不会互相影响, 如果一个事务要访问的数据正在被另外一个事务修改, 只要另外一个事务未提交, 它所访问的数据就不受未提交事务的影响。
比如现在有个交易是从 A 账户转 100 元至 B 账户, 在这个交易还未完成的情况下, 如果此时 B 查询自己的账户, 是看不到新增加的 100 元的。
持久性是指一旦事务提交后, 它所做的修改将会永久的保存在数据库上, 即使出现宕机也不会丢失。
分布式系统 (distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。
分布式系统是建立在网络之上的软件系统。正是因为软件的特性, 所以分布式系统具有高度的内聚性和透明性。
因此, 网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统), 而不是硬件。
分布式系统可以应用在不同的平台上如: PC、工作站、局域网和广域网上等。
分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。
在分布式计算系统可以根据需要增加更多的机器。
共享数据是必不可少的应用, 如银行, 预订系统。
由于该系统是非常灵活的, 它很容易安装, 实施和调试新的服务。
分布式计算系统可以有多台计算机的计算能力, 使得它比其他系统有更快的处理速度。
由于它是开放的系统, 本地或者远程都可以访问到该服务。
相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
故障排除和诊断问题。
更少的软件支持是分布式计算系统的主要缺点。
网络基础设施的问题, 包括: 传输问题, 高负载, 信息丢失等。
开放系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。
在计算机科学中, CAP 定理 (CAP theorem), 又被称作 布鲁尔定理 (Brewer’s theorem), 它指出对于一个分布式计算系统来说, 不可能同时满足以下三点:
CAP 理论的核心是: 一个分布式系统不可能同时很好的满足一致性, 可用性和分区容错性这三个需求, 最多只能同时较好的满足两个。
因此, 根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
BASE: Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。
CAP 理论的核心是: 一个分布式系统不可能同时很好的满足一致性, 可用性和分区容错性这三个需求, 最多只能同时较好的满足两个。
BASE 是 NoSQL 数据库通常对可用性及一致性的弱要求原则:
ACID | BASE |
---|---|
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 软状态/柔性事务(Soft state) |
隔离性(Isolation) | 最终一致性 (Eventual consistency) |
持久性 (Durable) | - |