课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而今天我们就通过案例分析来了解一下,数据库本地事务与全局事务的区别和优缺点。
1、本地事务
事务特性:ACID,其中C一致性是目的,AID是手段。
实现隔离性
写锁:数据加了写锁,其他事务不能写也不能读。
读锁:数据加了读锁,其他事务不能加写锁可以加读锁,可以允许自己升级为写锁。
范围锁:对某个范围加写锁,范围内数据不能写入。
隔离级别
以锁为手段来实现隔离性才是数据库表现出不同隔离级别的根本原因。
可串行化:对事务所有读、写数据加上三种锁。
可重复读:不加范围锁,会有幻读问题。
2、全局事务
为了解决这个问题,XA将事务提交拆分成为两阶段过程:
准备阶段:又作投票阶段,协调者询问事务的所有参与者是否准备好提交,参与者如果准备好提交则回复Prepared。对于数据库来说,准备操作是在重做日志中记录全部事务提交操作所要做的内容,不释放隔离性,继续持有锁。
提交阶段:又作执行阶段,协调者在上一阶段收到Prepared消息,先自己在本地持久化事务状态为Commit,操作完成之后向所有参与者发送Commit指令;否则,任意一个参与者回复了Non-Prepared消息,或任意一个参与者超时未回复,协调者将将自己的事务状态持久化为Abort之后,向所有参与者发送Abort指令,参与者立即执行回滚操作。
缺点
单点问题:协调者在两段提交中具有举足轻重的作用,协调者等待参与者回复时可以有超时机制,允许参与者宕机,但参与者等待协调者指令时无法做超时处理。一旦宕机的不是其中某个参与者,而是协调者的话,所有参与者都会受到影响。如果协调者一直没有恢复,没有正常发送Commit或者Rollback的指令,那所有参与者都必须一直等待。
性能问题:两段提交过程中,所有参与者相当于被绑定成为一个统一调度的整体,期间要经过两次远程服务调用,三次数据持久化(准备阶段写重做日志,协调者做状态持久化,提交阶段在日志写入CommitRecord),整个过程将持续到参与者集群中慢的那一个处理操作结束为止,这决定了两段式提交的性能通常都较差。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。