前言不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付 。又或者在网上购物明明已经扣款,但是却告诉我没有发生交易 。这一系列情况都是因为没有事务导致的 。这说明了事务在生活中的一些重要性 。有了事务,你去小卖铺买东西,那就是一手交钱一手交货 。有了事务,你去网上购物,扣款即产生订单交易 。
事务的具体定义事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚 。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制 。
数据库本地事务ACID说到数据库事务就不得不说,数据库事务中的四大特性,ACID:
- A:原子性(Atomicity)
就像你买东西要么交钱收货一起都执行,要么要是发不出货,就退钱 。
- C:一致性(Consistency)
- I:隔离性(Isolation)
打个比方,你买东西这个事情,是不影响其他人的 。
- D:持久性(Durability)
打个比方,你买东西的时候需要记录在账本上,即使老板忘记了那也有据可查 。
InnoDB实现原理InnoDB是MySQL的一个存储引擎,大部分人对mysql都比较熟悉,这里简单介绍一下数据库事务实现的一些基本原理,在本地事务中,服务和资源在事务的包裹下可以看做是一体的:

文章插图
我们的本地事务由资源管理器进行管理:

文章插图
而事务的ACID是通过InnoDB日志和锁来保证 。事务的隔离性是通过数据库锁的机制实现的,持久性通过redo log(重做日志)来实现,原子性和一致性通过Undo log来实现 。UndoLog的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为UndoLog) 。然后进行数据的修改 。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态 。和Undo Log相反,RedoLog记录的是新数据的备份 。在事务提交前,只要将RedoLog持久化即可,不需要将数据持久化 。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化 。系统可以根据RedoLog的内容,将所有数据恢复到最新的状态 。对具体实现过程有兴趣的同学可以去自行搜索扩展 。
分布式事务什么是分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上 。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败 。本质上来说,分布式事务就是为了保证不同数据库的数据一致性 。
分布式事务产生的原因从上面本地事务来看,我们可以看为两块,一个是service产生多个节点,另一个是resource产生多个节点 。
service多个节点随着互联网快速发展,微服务,SOA等服务架构模式正在被大规模的使用,举个简单的例子,一个公司之内,用户的资产可能分为好多个部分,比如余额,积分,优惠券等等 。在公司内部有可能积分功能由一个微服务团队维护,优惠券又是另外的团队维护
推荐阅读
- 福建尤溪红茶再获殊荣,尤溪茶叶参评闽茶杯喜获佳绩
- 茶凉了再喝 真的有害健康吗?
- 淘宝标题改了再改回来 淘宝标题能改动吗
- 找不到自媒体视频素材?看完这篇文章,再也不用担心没素材了
- 找不到自媒体视频愁素材?看完这篇文章,再也不用担心没视频素材了
- 淘宝店铺被扣48分以后还能开起来吗? 淘宝扣了48分还能再开店吗
- 别再用PS抠图了,PPT就能完成一键抠图,你不会还没发现吧
- 不再犹豫歌词分享
- 招聘|深圳:“热心人”把流浪女打扮性感暴露去上班,女子:有人想摸我
- 瓜子|不节食,不运动,45天狂瘦30斤?但这种减肥方法,劝你别再乱模仿
