事务处理: databse jdbc mybatis spring

         事务的认识须要一个至关漫长的流程,慢慢在实践中理解,而后在强化相关理论基础。
  数据库中的事务:

        传统的本地事务处理都是依靠数据库自身事务处理能力,而事务自己是传统关系型数据库的基石。简单来讲事务就是一些知足acid特性的sql,数据库经过锁和日志实现这些机制。国内的mysql中innodb事务引擎引料众多,也有不少文章让咱们深入理解索引和事务的概念。此处简单说一下个人理解;java

   A:表明原子性,最好理解,要么全作,要么全不作。mysql

   C:一致性,简单来讲就是你扣了50,有人就加了50(一致性自己存在好多种类,传统理解数据库是强一致性)程序员

   I:隔离性,事务之间的可见行,提及来很抽象,其实看看4中隔离性级别,作个实验,就很好理解了。好比市面上大多数数据库默认隔离性级别是读已提交数据,因此只有其余事务提交以后的更新你才能感知到。算法

可是这里面有个好玩,也是核心交易建立支付单用来判重用的,若是一个事务A插入一条数据,另一个事务B插入同一条数据(主键相同),即便另一个事务没提交,也会抱主键冲突。这个很好玩。能够实验尝试。spring

  D:持久性,一旦提交,不会丢失。可是谁能保证必定不会丢失呢,天灾人祸。其实这一点,就是把事务日志提交持久化redo日志中,即便断电,内存中数据没有持久化到磁盘,利用redo日志恢复,咋恢复的,之前学习用的ARIES Recovery Algorithm。sql

 

    jdbc中的事务

      对于java 程序员而言,是不须要直接使用那些sql操做数据库的,咱们使用jdbc, 每一个数据库厂商都会为一些编程语言提供驱动,听起来高端,其实就是一个跟数据库通讯的api ,内部经过数据库本身的协议通讯。jdbc是一个标准接口,每一个厂商各自实现,而后对于不一样的数据库咱们操做起来基本相同。架构以下图,最重要的就是这个Connection,我特意作了试验,想知道它什么东西。在msyql中show processlist 能够查看当前执行的线程,发现其实每一个Connection对应一个处理线程,提交事务和回滚事务都是这个Connection处理,固然发送sql和接收结果集合都是它。因此本地事务处理仍是靠数据库自己。数据库

  


            jdbc驱动的架构编程

         

             jdbc驱动要实现的接口都在jdk中的rt.jar中的package java.sql,idea的中的工具能够直接查看包内的类直接关系,很爽。看下图,固然还有另一个图,是sql相关的异常,一个项目如何设置一个规范的异常体系,后期花时间总结。api

 

 

spring事务处理(有待研究)

  spring 的事务管理最终仍是须要依赖数据库自身事务管理,可是它在业务层提供了一个很重要的功能就是事务的传播性。很好玩,通常在开发过程当中,我门都是是用默认的传播机制。架构

     

 

   分布式事务理论(有待研究)

      CAP:  

      BASE :

     一致性协议:   两阶段,三阶段,paxos方法(zookeeper基于此实现,太复杂不学),raft(号称简单而容易实现的一致性算法,准备细致的看看)

相关文章
相关标签/搜索