拆分执行单元,组成一个事务的所有操作只有在所有操作都可以正常执行的情况下才能提交,只要其中任何一个操作失败执行,会导致整个事务的回滚。简单地说,事务提供了一种“什么都不做,或者做全套(AllorNothing)”的机制。数据库本地事务说到数据库事务,不得不说数据库事务有四大特点,ACIDA:原子性(Atomicity)一个事务(transaction)中的所有操作要么全部完成,要么全部不完成,不会结束在中间的某个环节。如果交易执行过程中出现错误,则会回滚(Rollback)到交易开始前的状态,就好像交易从未执行过一样。就像你买东西,要么付钱,要么一起接收,否则如果您无法交付,您将获得退款。C:一致性(Consistency)事务的一致性是指数据库在事务执行前后必须处于一致的状态。如果事务成功完成,则系统中的所有更改都将正确应用并且系统处于有效状态。如果事务发生错误,系统中的所有更改将自动回滚,系统返回到原始状态。I:隔离是指在并发环境下,当不同的事务同时操作同一个数据时,每个事务都有自己完整的数据空间。并发事务所做的修改必须与任何其他并发事务所做的修改隔离开来。一个事务查看数据更新时,数据的状态要么是另一个事务修改前的状态,要么是另一个事务修改后的状态,中间状态下事务不会查看数据。例如,你买了东西并不会影响别人的D:Durability(持久性)意味着只要交易成功结束,它对数据库所做的更新就必须永久保存。即使发生系统崩溃,重启数据库系统后,数据库也可以恢复到事务成功结束时的状态。比如你买了东西,你需要记在账本上,即使老板忘记了,也会有据可查。简单来说,ACID从不同维度描述了事务的特性:原子性——事务操作的整体一致性——事务操作下数据的正确性和隔离性——并发事务操作下数据的正确性和持久性——数据修改的可靠性transactions支持事务(Transaction)的数据库需要具备这四个特性,否则在事务处理过程中无法保证数据的正确性,处理结果可能达不到请求方的要求。什么时候使用数据库事务介绍了事务的基本概念之后,什么时候应该使用数据库事务呢?简单来说,业务中有一套数据操作。如果其中任何一个操作执行失败,则整套操作将不会执行,并恢复到未执行状态,要么全部成功,要么全部失败。使用数据库事务时,需要注意保持事务尽可能短。修改多个不同表中的数据的冗长事务会严重阻碍系统中的所有其他用户,这很可能会导致一些性能问题。分布式事务的背景和概念是什么?随着互联网的快速发展,微服务、SOA等服务架构模式正在被大规模使用。现在的分布式系统一般都是由多个独立的子系统组成的。多个子系统通过网络通信相互协作完成各种功能。有很多用例可以跨多个子系统完成。典型的电子商务网站的订单支付流程至少涉及到交易系统和支付系统,而这个过程中涉及到交易的概念,即保证交易系统和支付系统的数据一致性,这里我们把这种跨系统事务称为分布式事务,具体来说,分布式事务是指事务的参与者、支持事务的服务器、资源服务器、事务管理器分别位于不同分布式系统的不同节点上。以互联网上常用的交易业务为例:上图包含库存和订单两个独立的微服务,每个微服务维护自己的数据库。在交易系统的业务逻辑中,商品下单前,需要调用库存服务扣除库存,然后调用订单服务创建订单记录。可见,如果多个数据库之间的数据更新不保证事务,会导致子系统数据不一致,出现业务问题。分布式事务的难点事务的原子事务操作跨越不同的节点。当多个节点对一个节点操作失败时,需要保证多节点操作**或什么都不做,或做全套(AllorNothing)**原子性。#####事务的一致性当发生网络传输故障或节点故障时,节点间的数据复制通道中断。在进行事务操作时,需要保证数据的一致性,保证事务的任何操作都不会导致数据违反数据库定义。约束、触发器和其他规则。#####事务隔离事务隔离的本质是如何在多个并发事务处理过程中纠正读写冲突和写写冲突,因为在分布式事务控制中,可能会出现commit异步现象,这时候,可能存在“部分承诺”的交易。这时候,如果并发应用程序不受控制地访问数据,就可能会出现“脏读”问题。本文由传智教育博学谷狂野建筑师教研团队发布。如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力。转载请注明出处!
