DRDS事务模型 本文主要介绍DRDS的分布式事务。 分布式事务介绍 使用分布式关系型数据库后,一个事务如果涉及到多个物理数据库节点操作,可能会出现部分物理节点处理成功、部分失败的中间状态。按照传统的数据库操作方式无法保障数据的一致性及可用性,这就是在分布式数据库中需要解决的分布式事务问题。 分布式事务解决方案 这里主要列出由DRDS提供的几种分布式事务解决方案。 补偿型事务方案 基本原理 应用发起的事务涉及多个后端数据库节点的修改。 在COMMIT前,DRDS会保存整个分布式事务中涉及的所有SQL。 当COMMIT部分出错的时候,DRDS会给应用返回处理成功。 DRDS记录事务的出错节点,让事务补偿器进行事务补偿。 DRDS事务补偿器自动对事务中出错节点进行事务补偿,记录补偿结果。 应用在进入下一环节时,需要检查以上数据是否完整。 基本流程 启动分布式事务:dt start [tab]; 会返回事务ID。 执行SQL:如果SQL涉及到的表在某些节点中处于事务补偿状态,这些表在该节点中的数据不能被访问, 因此SQL执行的时候会被锁住或者返回错误。 commit分布式事务:commit的时候会先执行次要节点,然后再执行主要节点。主要节点是最后一条SQL对应的唯一节点。 检查是否有wanrings返回:show warnings。 如果有warnings返回,使用事务ID,查询补偿是否完成:dt status tid。 补偿示例 sql public void transferOwn throws Exception { public static final String name "com.mysql.jdbc.Driver"; public static final String user "drdsUser"; public static final String password ""; Class. forName (name);//指定连接类型 String url ”ip:port”; String schema "schemaName"; Connection c DriverManager.getConnection (String. format( "jdbc:mysql://%s/ %s ?user%s&password%s&useUnicodetrue&characterEncodingutf8", url, schema, userName, password)); c.setAutoCommit (false); Statement s c.createStatement(); //开启分布式事务 s.execute ("dt start"); //执行业务逻辑 s. execute ("xxx;"); c.commit(); }