分布式事物理解

来源:互联网 发布:亨利领 t恤 知乎 编辑:程序博客网 时间:2024/06/06 10:51

1. 单机事物理解:

   具有ACID特性才能算是事物,

   A: 原子性  , 即 事物的组成部分 要么全部执行,要么都不执行。 原子性通过undo 实现, 即事物执行过程中的步骤对应几个版本,版本对应响应的Undo回滚段,数据状态的每次变化都会保存在undo日志里。 执行中某一步骤出了问题要回滚 通过该步骤前一段步骤对应的undo来恢复数据状态。

  C:  一致性 ,即 事物内的 数据状态在执行过程中整体必须保持一致, eg: 事物1:A转100给B,事物2: B转100给C ;  在事物1:A-100执行过程中,事物2访问A帐号扔为100执行了转账操作给C,而事物1 也能正常执行A-100转给B   , 这样原本A、B、C 三账号共计100元 变为 200元,  数据不一致。

        一致性(happing-before) 保证 在多个事物并发执行时,每个事物的执行过程不受其他事物干扰,让该事物看起来就象只有它一个事物执行,从而保证该单元事物涉及的数据都是按照该事物逻辑单元执行,  即 保证事物执行涉及的数据不被其他事物更改或访问。  一致性与原子性是不同的概念。

     事物的一致性其实保证 单元事物在全部执行完之后才能对其他单元事物可见。这也就避免上面的转账问题。

 i :  隔离性:  由 锁 实现 事物之间的隔离,  不同的锁(序列化,排它锁,读写锁分离、写锁覆盖读锁(读写事物))  引用:所有操作序列化 -》 对共享数据加 排他锁(表级,行级)--》读写锁分离 (共享锁,排他锁)实现读读并行,即实现可重复读的隔离级别 --》 要实现读写并行,即去掉读锁(共享锁),但是就不可重复读了。

  隔离是对一致性的破坏,最高级别的隔离即 事物之间串行化为一个队列执行 是对一致性最低级的破坏。

  隔离级别:(从高到低)

    序列化读写  (所有读,写事物都不能并发执行)

    可重复读      (可读读并发)

     读已提交     (可读读,读写并发,通过后面的写事物的写锁 覆盖 前面的 读事物读锁,且前面的读事物里的数据不能重复读)

     读未提交    (可读读、读写、写读并发,  写读并发会出现脏读)

 D:  持久性: 提交后的事物必须要持久化,持久化过程可能会出现不能保存问题。

     针对持久化 与  提交延迟 的 调校 做出的 持久策略如下:

    1. 事物一旦COMMIT到内存 就返回成功,标志事物处理完成。 延迟低,但内存持久化硬盘得不到保证。

    2. 将多次commit到内存数据打包再写入内存。   必须达到多次提交后,才能持久化硬盘,所以有额外延迟。

0 0