PolarDB-X 1.0-用户指南-分布式事务-基于 MySQL 5.6 的分布式事务

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文描述的分布式事务适用于MySQL 5.6版本,或版本早于5.3.4的DRDS实例。

本文描述的分布式事务适用于MySQL 5.6版本,或版本早于5.3.4的DRDS实例。

基本原理

关于分布式事务的原理,详情请参见分布式事务基本原理

对于 MySQL 5.6 版本,由于 MySQL XA 协议实现尚不成熟,PolarDB-X自主实现了 2PC 事务策略用于分布式事务。MySQL 5.7 及更高版本中,推荐您使用 XA 事务策略。

如何使用

如果某个事务可能涉及多个数据分库,则需要将当前事务声明为分布式事务。如果事务仅涉及单个数据分库,则无需开启分布式事务,直接像 MySQL 单机事务那样即可,无需额外操作。

分布式事务开启方式如下:

在事务开启后,执行 SET drds_transaction_policy = '...' 即可。

MySQL 命令行客户端使用示例(以2PC事务为例)


  1. SET AUTOCOMMIT=0;
  2. SET drds_transaction_policy ='2PC';--建议MySQL5.6用户使用
  3. ....--业务 SQL
  4. COMMIT;-- ROLLBACK

Java JDBC 代码示例(以 2PC 事务为例)


  1. conn.setAutoCommit(false);
  2. try(Statement stmt = conn.createStatement()){
  3.    stmt.execute("SET drds_transaction_policy = '2PC'");
  4. }
  5. // ... 运行业务 SQL ...
  6. conn.commit();// 或 rollback()

常见问题

如何在 Spring 框架中使用PolarDB-X分布式事务?

如果使用 Spring 的 @Transactional 注解开启事务,可以通过扩展事务管理器来开启PolarDB-X分布式事务。

代码示例:


  1. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  2. import org.springframework.transaction.TransactionDefinition;

  3. import javax.sql.DataSource;
  4. import java.sql.Connection;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;

  7. publicclassDrdsTransactionManagerextendsDataSourceTransactionManager{

  8.    publicDrdsTransactionManager(DataSource dataSource){
  9.        super(dataSource);
  10.    }

  11.    @Override
  12.    protectedvoid prepareTransactionalConnection(Connection con,TransactionDefinition definition)throwsSQLException{
  13.        try(Statement stmt = con.createStatement()){
  14.            stmt.executeUpdate("SET drds_transaction_policy = '2PC'");// 以 2PC 为例
  15.        }
  16.    }
  17. }

之后,在 Spring 配置中将上述类实例化,例如:


  1. id="drdsTransactionManager"class="my.app.DrdsTransactionManager">
  2.     name="dataSource"ref="yourDataSource"/>

对于需要开启PolarDB-X分布式事务的类,加上注解 @Transactional("drdsTransactionManager") 即可。

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
45 1
|
1月前
|
SQL JSON 关系型数据库
MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
【10月更文挑战第3天】MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
116 5
|
1月前
|
关系型数据库 Unix MySQL
MySQL是一种关系型数据库管理系统
MySQL是一种关系型数据库管理系统
41 2
|
1月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
17 0
|
3月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
89 5
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
PolarDB 并行查询问题之保证与MySQL的兼容性如何解决
40 1
|
3月前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
150 10
|
3月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
104 1
|
3月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
62 0
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
什么是云原生数据库PolarDB分布式版
本文介绍什么是云原生数据库PolarDB分布式版,也称为PolarDB分布式版,本手册中简称为PolarDB-X。
83 0

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 下一篇
    无影云桌面