zoukankan      html  css  js  c++  java
  • 2018/12/7 数据库事务和分布式事务

    早上占坑,晚上补


     什么是数据库事务,

    数据库事务是保证数据原子操作的机制,通过事务可以保证数据操作的成功或失败,避免产生部分成功的情况。

    实际应用举例:

    充值操作的支付成功回调,支付宝回调给处理接口后,一般至少会有两条处理,1.改变订单状态 2.修改账户的余额。

    那么如果没有事务,就可能会出现,订单状态修改成功,然后调用修改账户余额时失败的情况,这种情况不加控制就会出现生产事故。尤其是跟钱打交道的事情,都是大事情。

    为了保证安全,必须保证两条信息要么都成功,要么都失败,这样才能更方便地进行后续处理,比如失败后重新提交或者人工处理。总之数据不会出现订单和余额不一致的异常的状态。

    事务的原理:
    事务其实并非借助了什么复杂的硬件机制完成的统一成功、统一失败,事务失败回滚,其原理很简单,就是通过书写回滚日志。

    在用户调用事务的方式提交多条SQL语句时,在执行SQL语句之前会先将当前的状态信息或执行的SQL命令信息写到回滚日志中,这样,在多条SQL执行过程中如果发生了异常情况或失败,数据库通过回滚日志记录的信息将数据库还原到第一个SQL执行之前的状态,然后通知调用者执行失败。这就是事务的基本原理,核心就是回滚日志和回滚。

    分布式事务,

    分布式事务的目标和普通的事务是相同的,都是为了保证数据的一致性,但是分布式事务的环境更复杂,比如传统的事务处理一般是在一个系统中,某一个接口下,

    调用JDBC的接口,声明以事务的方式提交多个SQL命令,然后就可以根据返回的执行成功或者失败进行接下来的处理,但是分布式事务复杂在多个命令是发生在不同的系统中的,

    比如上面的例子中使用分布式开发,账户系统和订单系统分别是不同的系统,甚至可能是不同类型的数据库,那么如何保证不同系统的多个操作保持原子性难度就更大了一些。

    不过,其核心原理仍然相同,但是这时回滚日志和事务协调就不能是交给某个数据库去管理了,因为涉及到多个系统多个数据库,这个记录沟通、协调的功能由一个独立的事务应用来管理,这就是分布式事务框架的由来,,,其实这是我猜的,分布式事务具体还没看

    程序其实说简单也简单,万变不离其宗,无论是什么复杂分布的事务,都是通过

    一个程序扮演协调者的角色,记录各个操作的操作信息,监控各个操作的操作结果,当出现处理失败时将数据还原,核心思想就是这样。

    高级拓展:

    MySQL ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

  • 相关阅读:
    Windows Phone7 开发工具简介
    peration not supported. Unknown error: 0x8973190e
    C/C++学习建议(摘抄自:程序员2010年8月P61页)
    OpenOffice/LibreOffice的行距问题
    Finder打开剪切功能
    设备资源管理系统-用户管理
    设备资源管理系统-数据字典
    设备资源管理系统-代办事宜
    设备资源管理系统-首页显示
    设备资源管理系统-DAO底层方法-查询
  • 原文地址:https://www.cnblogs.com/lbzhu/p/10081035.html
Copyright © 2011-2022 走看看