事务的特性:ACID
浅谈自己的看法,若有错误,请纠正
原子性意味着数据库中的事务执行是作为原子。即不可再分,整个语句要么执行成功,要么失败回滚.
一致性,指事务开始到事务结束的过程,数据库的完整性约束没有被破坏。满足算数逻辑 拿转账的例子说明:A向B转账500,则应该同时执行满足 A –500,B+500的算术逻辑.
多个事务的执行是互不干扰的,当多个用户并发的访问数据库,一个用户的操作对其他用户的操作应该是不可干扰的,应当相互隔离
数据库中的隔离级别:
READ_UNCOMMITTED: 已提交读,与Read_uncommitted不同之处,解决了脏读的问题.
READ_COMMITED: 已提交读,与Read_uncommitted不同之处,解决了脏读的问题.
REPEATABLE_READ: 可重复读,解决了脏读的问题,但是依然可以重复读、幻读,mysql默认的隔离级别.
在mysql中可以使用select @@tx_isolation 与 set session transcation isolation level xxx来查看和修改事务的隔离级别
SERLALIZABLE: 可序列化,事务的最高隔离级别,不能脏读, 重复读和幻读,但会失效率降低,通常很少使用.
当事务提交后,它对数据库的操作结果的改变是永久的,不可以逆转.
分布式CAP理论
CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性),
Availability(可用性),Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可能同时满足.
数据在多个事务之后是否能够保持一致的特性.
服务必须保持一直可用的状态,并且应该在正常的时间内响应
在分布式系统中某个单一的节点或者服务出现异常停止服务时,仍然能够对外提供满足一致性和可用性的服务.
如何取舍
根据CAP的原则, 只能同时三个特性中的两个,在分布式系统中,应该首先满足Partition Tolerance,这是因为当每一节点出现故障时,必须保证这个系统的正常服务,当然此时是无法同时满足一致性和可用性的. 那么应当保留A还是P呢,当然具体的取舍规则应当参考特定的条件,通常的网站很多都采用AP,同时采用适合的方式达到最终一致性(Eventual Consitency.
BASE理论
BASE理论是对CAP理论的延伸,当分布式系统( 采用AP)无法做到强一致性,但可以使用适合的方式达到最终一致性(Eventual
Consitency.BASE是指
- 基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用.- 软状态(Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。- 最终一致性(Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。