首页 > 数据库 > 数据库开发技术 > 本地事务和分布式事务的区别
1 事务
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)
2 事务的特性
原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。转账前和转账后的总金额不变。
隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
MySQL:
MySQL引入了redo log,当做数据修改的时候,不仅在内存中操作,还会在redo log中记录这次操作。当事务提交的时候,会将redo log日志进行刷盘(redo log一部分在内存中,一部分在磁盘上)。当数据库宕机重启的时候,会将redo log中的内容恢复到数据库中,再根据undo log和binlog内容决定回滚数据还是提交数据
Undo Log 是为了实现事务的原子性(事物里的操作要么都完成,要么都不完成),在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。
为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(也就是Undo Log,undo日志存放在共享表空间里),然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。除了可以保证事务的原子性,Undo Log也可以用来辅助完成事务的持久化(事务一旦完成,该事务对数据库所做的所有修改都会持久的保存到数据库中)
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性
CAP由Eric Brewer在2000年PODC会议上提出[1][2],是Eric Brewer在Inktomi[3]期间研发搜索引擎、分布式web缓存时得出的关于数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)的猜想:
(C) 数据一致性(consistency):也就是业务代码与数据库操作的原子性
(A) 可用性(availability):所有读写请求在一定时间内得到响应,可终止、不会一直等待
(P) 分区容错性(partition-tolerance):多个可以进行负载均衡的节点
二 分布式事物
————————————————
推荐阅读:
https://blog.csdn.net/worn_xiao/article/details/85224681
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2902745/ ,如需转载,请注明出处,否则将追究法律责任。