Sharding JDBC 实战:分布式事务处理

Sharding-JDBC分库分表-分布式事务-5 本文介绍了Sharding JDBC提供的两种分布式事务解决方案:XA事务和BASE事务。XA事务基于X/OPEN组织的DTP模型,通过两阶段提交实现强一致性,适合短事务场景;BASE事务则追求最终一致性,适合高并发场景。文章重点演示了XA事务的Atomikos实现,包括依赖引入、事务配置和使用方法。通过测试案例验证了XA事务在分库分表环境中的正确回滚机制,确保了分布式事务的原子性。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.youkuaiyun.com/qq_41432730/

article/details/122373098


在我们使用Sharding JDBC分库分表的时候,会带来另外一个问题,就是分布式事务问题,如下图所示。用户采购商品业务,整个业务包含3个微服务:

  • 库存服务: 扣减给定商品的库存数量。

  • 订单服务: 根据采购请求生成订单。

  • 账户服务: 用户账户金额扣减。

这三个业务操作应该属于同一个事务,但是这些数据却分配在不同的数据库上,所以没办法采用数据库的事务来保证数据一致性。

eb1df33698b585af7011420b77ed8884.png

这个时候,要解决分布式事务问题,就需要引入全局事务。

1. 什么是全局事务呢?

全局事务是一个DTP模型的事务,所谓DTP模型指的是 X/Open DTP (X/Open Distributed Transaction Processing Reference Model),是 X/Open 这个组织定义的一套分布式事务的标准。

X/Open,即现在的open group,是一个独立的组织,主要负责制定各种行业技术标准。

官网地址:http://www.opengroup.org/

X/Open组织主要由各大知名公司或者厂商进行支持,这些组织不光遵循X/Open组织定义的行业技术标准,也参与到标准的制定。

X/Open了定义了规范和API接口,由这个厂商进行具体的实现,这个标准提出了使用二阶段提交(2PC –Two-Phase-Commit)来保证分布式事务的完整性。后来J2EE也遵循了X/OpenDTP规范,设计并实现了java里的分布式事务编程接口规范-JTA,如下图所示,表示一个X/Open DTP模型。

3e7d8f468a30eb015fa1b563084c3c62.png

X/Open DTP模型定义了三个角色和两个协议,其中三个角色分别如下:

  • AP(Application Program) ,表示应用程序,也可以理解成使用DTP模型的程序

  • RM(Resource Manager) ,资源管理器,这个资源可以是数据库, 应用程序通过资源管理器对资源进行控制,资源管理器必须实现XA定义的接口

  • TM(Transaction Manager) ,表示事务管理器,负责协调和管理全局事务,事务管理器控制整个全局事务,管理事务的生命周期,并且协调资源。

两个协议分别是:

XA协议: XA 是X/Open DTP定义的资源管理器和事务管理器之间的接口规范,TM用它来通知和协调相关RM事务的开始、结束、提交或回滚。

目前Oracle、Mysql、DB2都提供了对XA的支持;XA接口是双向的系统接口,在事务管理器(TM ) 以及多个资源管理器之间形成通信的桥梁(XA不能自动 提交)

  • https://dev.mysql.com/doc/refman/8.0/en/xa.html

  • https://dev.mysql.com/doc/refman/8.0/en/xa-statements.html

XA协议的语法,主流的数据库都支持 XA协议,从而能够实现跨数据库事务。

XA {START|BEGIN} xid [JOIN|RESUME] --负责开启或者恢复一个事务分支,并且管理XID 到调用线程 
XA END xid [SUSPEND [FOR MIGRATE]] --负责取消当前线程与事务分支的关联 
XA PREPARE xid --负责询问RM 是否准备好了提交事务分支 
XA COMMIT xid [ONE PHASE] --知RM提交事务分支 
XA ROLLBACK xid --通知RM回滚事务分支 
XA RECOVER [CONVERT XID]

TX协议: 全局事务管理器与资源管理器之间通信的接口

在分布式系统中,每一个机器节点虽然都能够明确知道自己在进行事务操作过程中的结果是成功还是失败,但却无法直接获取到其他分布式节点的操作结果。

因此当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个“协调者”(TM)来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为AP。TM负责调度AP的行为,并最终决定这些AP是否要把事务真正进行提交到(RM)。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

2. 2pc提交协议

在X/OpenDTP模型中,一个分布式事务所涉及的SQL逻辑都执行完成,并到了(RM)要最后提交事务的关键时刻,为了避免分布式系统所固有的不可靠性导致提交事务意外失败,TM 果断决定实施两步走的方案,这个就称为二阶提交,如下图所示。

二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议也被认为是一种一致性协议,用来保证分布式系统数据的一致性。

目前,绝大部分的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的,利用该协议能够非常方便地完成所有分布式事务AP的协调,统一决定事务的提交或回滚,从而能够有效保证分布式数据一致性,因此2pc也被广泛运用在许多分布式系统中。

d291994f7d3383b84242fb7699f9ae15.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

3. XA事务存在的问题

上述基于XA协议的全局事务,是属于强一致性事务,因为在全局事务中,只要有任何一个RM出现异常,都会导致全局事务回滚。同时,本地事务在Prepare阶段锁定资源时,如果有其他事务要要修改相同的数据,就必须要等待前面的事务完成,这本身是无可厚非的设计,但是由于多个RM节点是跨网络,一旦出现网络延迟,就导致该事务一直占用资源使得整体性能下降。

另外,在XA COMMIT阶段,如果其中一个RM因为网络超时没有收到数据提交的指令,会导致数据不一致,为了解决这个问题,很多开源分布式事务框架都会提供重试机制来保证数据一致性。

4. CAP理论

说到强一致性的问题,必然要提到CAP理论。

CAP的含义:

  • C:Consistency 一致性 同一数据的多个副本是否实时相同。

  • A:Availability 可用性 可用性:一定时间内 & 系统返回一个明确的结果 则称为该系统可用。

  • P:Partition tolerance 分区容错性 将同一服务分布在多个系统中,从而保证某一个系统宕机,仍然有其他系统提供相同的服务。

CAP理论告诉我们,在分布式系统中,C、A、P三个条件中我们最多只能选择两个。那么问题来了,究竟选择哪两个条件较为合适呢?

对于一个业务系统来说,分区容错性是必须要满足的条件。业务系统之所以使用分布式系统,主要原因有两个:

  • 提升整体性能 当业务量猛增,单个服务器已经无法满足我们的业务需求的时候,就需要使用分布式系统,使用多个节点提供相同的功能,从而整体上提升系统的性能,这就是使用分布式系统的第一个原因。

  • 实现分区容错性 单一节点 或 多个节点处于相同的网络环境下,那么会存在一定的风险,万一该机房断电、该地区发生自然灾害,那么业务系统就全面瘫痪了。为了防止这一问题,采用分布式系统,将多个子系统分布在不同的地域、不同的机房中,从而保证系统高可用性。

所以我们需要根据自己的业务需求,选择采取CP还是AP。

5. Sharding-JDBC分布式事务支持

了解了X/Open DTP模型的全局事务解决方案,就必然需要一个成熟的技术中间件来简化我们对于分布式事务的开发逻辑,而Sharding-JDBC提供了分布式事务解决方案。

Sharding-JDBC支持以下四种事务模型,实际上这些分布式事务模式都是集成开源的事务组件做的集成。

  • Atomikos事务

  • Narayana事务

  • Bitronix事务

  • Seata事务

Apache ShardingSphere 默认的 XA 事务管理器为 Atomikos,下面我们通过Atomikos来配置一个分布式事务的使用模型。

5.1 Atomikos事务

Atomikos是为Java平台提供的开源的事务管理工具,它包含收费和开源两个版本,开源版本基本能满足我们的需求。

Atomikos实现了JTA/XA规范中的事务管理器(Transaction Manager)应该实现的相关接口。

JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据,JDBC驱动程序的JTA支持极大地增强了数据访问能力。

  • TransactionManager : 常用方法,可以开启、回滚、获取事务。begin(),rollback()…

  • XAResouce : 资源管理,通过Session来进行事务管理。commit(xid)…

  • XID : 每一个事务都分配一个特定的XID

JTA是如何实现多数据源的事务管理呢?

主要的原理是两阶段提交,以上面的请求业务为例,当整个业务完成了之后只是第一阶段提交,在第二阶段提交之前会检查其他所有事务是否已经提交,如果前面出现了错误或是没有提交,那么第二阶段就不会提交,而是直接rollback操作,这样所有的事务都会做Rollback操作。

5.2 实战

5.2.1 项目搭建

使用IDEA直接创建Spring boot 项目即可。

5.2.2 依赖

由于使用XA事务,所以除了Sharding依赖外还需要引入事务依赖。

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
    <version>5.0.0-alpha</version>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>
<!-- 使用 XA 事务时,需要引入此模块 -->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-transaction-xa-core</artifactId>
    <version>5.0.0-alpha</version>
</dependency>

5.2.3 配置

接下来就是配置相关数据库连接信息以及分片规则;

在这里主要做的是创建了两个数据源(数据源最好设置两台服务器的数据库)以及设置好了相应的分库规则。

server.port=8080
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html

spring.shardingsphere.props.sql-show=true
spring.shardingsphere.datasource.names="ds-0,ds-1"
spring.shardingsphere.datasource.common.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.common.driver-class-name=com.mysql.jdbc.Driver

spring.shardingsphere.datasource.ds-0.jdbc-url=jdbc:mysql://localhost:3306/shard01?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.shardingsphere.datasource.ds-0.username=root
spring.shardingsphere.datasource.ds-0.password=123456

spring.shardingsphere.datasource.ds-1.jdbc-url=jdbc:mysql://localhost:3306/shard02?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.shardingsphere.datasource.ds-1.username=root
spring.shardingsphere.datasource.ds-1.password=123456

spring.shardingsphere.rules.sharding.default-database-strategy.standard.sharding-column=user_id
spring.shardingsphere.rules.sharding.default-database-strategy.standard.sharding-algorithm-name=database-inline
spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.props.algorithm-expression=ds-$->{user_id % 2}

spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.column=order_id
spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.key-generator-name=snowflake

spring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKE
spring.shardingsphere.rules.sharding.key-generators.snowflake.props.worker-id=123

5.2.4 事务一致性注解

Sharding jdbc解决事务一致性可以直接通过@ShardingTransactionType(TransactionType.XA)注解实现,我们只需要在对应的方法上加上即可。

比如下图,由于我们在配置文件中是通过user_id进行分库的,然后我们在这里通过随机数,会根据分片规则往两个数据库中插入数据。

当i=4的时候,我们人为的制造异常,如果我们不采用全局事务的话,则之前插入的数据还会再数据库中。所以这个时候我们只需要加上@ShardingTransactionType(TransactionType.XA)注解即可,XA属于强一致性。

24fb38bbf2da3daf1d273ce4c4bf8587.png

6. 项目地址

https://gitee.com/cl1429745331/sharding-jdbc-demo



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

eb4d172c82a5f6a5d773d6d3f3c35b33.png

已在知识星球更新源码解析如下:

a18e634e2691892ac803a7454a92c1a8.jpeg

e09f746df6f45cd023dae0d1fe970df5.jpeg

963d405d47207ce1374f2b4f62dc7ecb.jpeg

e981cdbbcf586fdc77e42fc93b8b49d6.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Sharding-JDBC 系列专题 - 第五篇:分布式事务 在分库分表场景中,单一事务可能涉及多个分片数据库(如ds_0和ds_1传统数据库事务无法保证跨库操作的原子性、一致性、隔离性和持久性(ACID),因此需要分布式事务。Sharding-JDBC 提供多种分布式事务机制,满足不同一致性需求。分布式事务是 Sharding-JDBC 保障跨分片数据一致性的核心功能。本篇详细介绍了 XA 事务和 BASE 事务的原理、配置和实现方法,通过实战案例展示了订单和库存更新的场景。XA 事务适合强一致性场景,而 BASE 事务适合高性能场景。 阅读详情

相关推荐

Sharding-JDBC分布式事务总结(一)之本地事务(LOCAL)

sharding分布式事务之本地事务 本地事务原理 默认本地事务是在不开启任何分布式事务管理器的前提下,让每个数据节点各自管理自己的事务。 它们之间没有协调以及通信的能力,也并不互相知晓其他数据节点事务的成功与否。 本地事务在性能方面无任何损耗,但在强一致性以及最终一致性方面则力不从心。 开启事务管理器后,shardingJDBC采取其实是一种弱XA事务,也是采用二阶段提交方式。 事务管理器配置 一条逻辑sql经过sharding解析后会生成多个数据连接,sharding将他们存放在一个map中。本地事务

ra__4的博客 3399

Sharding-JDBC分库分表从入门到精通

课程简介 随着互联网的发展,软件的规模在逐渐变大,用关系型数据库如何存储和处理大规模的业务数据成为企业面临的挑战, 关系型数据库作为OLTP(联机事务处理过程)系统的首选毋庸置疑,但是关系型数据面对大规模数据的处理有其先天的不足,比如单表存储上千万数据时便会出现不同程度的处理速度缓慢问题,如何解决?分库分表技术就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。本课程将系统的讲解分库分表技术。 课程价值 分库分表技术是为解决关系型数据库存储和处理大规模数据的问题,主要应用于OLTP系统,它与应用于OLAP(联机分析处理)的大数据技术有不同的应用场景,本课程本着从解决生产实际问题出发,讲授分库分表技术的解决方案,包括:垂直分库、垂直分表、水平分库、水平分表、读写分离,涵盖了分库分表的各种方案,并且深入讲解Sharding-JDBC框架的原理及使用方法,通过学习本课程可以快速应用到生产实践中。 课程优势 本课程不仅讲解多种有效的分库分表的解决方案,还深入讲解了Sharding-JDBC框架的原理和使用方法,Sharding-JDBC是一套轻量级的对代码零侵入的框架,在生产中有广泛的使用。本课程从思想原理、技术框架、案例实操三个方面去学习,可以快速的将分库分表技术应用到生产实践中,解决大数据存储与处理的问题。

Sharding-JDBC多数据源动态切换

Sharding-JDBC多数据源动态切换背景介绍方案介绍版本说明实现方式1. spring-boot依赖2. 启动类配置3. yml配置4. 自定义强制路由5. AOP切换数据源6. 编写事务代码7. 源码下载 背景介绍 我们公司项目使用多个mysql实例,业务分库,无需分表。需要实现如下功能: 多数据源动态切换 读写分离 分布式事务(XA) 方案介绍 通过阅读Sharding-Sphere官方文档,结合业务进行了设计,给出如下解决方案: 使用Sharding-JDBC管理数据源,自带读写分离和分布

zjy_love_java的博客 2万+

Sharding JDBC 实战 —— 分布式事务处理

在我们使用Sharding JDBC分库分表的时候,会带来另外一个问题,就是分布式事务问题,如下图所示。用户采购商品业务,整个业务包含3个微服务: 库存服务: 扣减给定商品的库存数量。 订单服务: 根据采购请求生成订单。 账户服务: 用户账户金额扣减。 这三个业务操作应该属于同一个事务,但是这些数据却分配在不同的数据库上,所以没办法采用数据库的事务来保证数据一致性。 这个时候,要解决分布式事务问题,就需要引入全局事务。 1. 什么是全局事务呢? 全局事务是一个DTP模型的事务,所谓DTP模

Java是世界上最好的语言 6737

Sharding-JDBC分布式事务实战与优化指南

分布式事务是微服务架构中的关键技术,用于保证跨服务或跨数据库操作的原子性。其核心原理包括两阶段提交(2PC)和补偿事务(Saga)等模式,在电商、金融等需要数据强一致性的场景尤为重要。Sharding-JDBC作为分库分表中间件,通过XA和BASE事务模型提供了开箱即用的分布式事务支持。在实际应用中,开发者需要根据业务特点选择合适的事务方案:XA协议适合金融交易等强一致性场景,而Saga模式则能显著提升电商等高并发系统的吞吐量。本文通过订单-库存-积分联动的典型电商案例,详解了事务配置、性能调优和常见问题排

weixin_30570101的博客 416

springboot整合sharding-jdbc实现分库分表详解

springboot整合sharding-jdbc实现分库分表详解

congge 9090

Sharding-JDBC 实战(史上最全)

文章很长,而且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 免费赠送 经典图书 : 极致经典 + 社群大片好评 《 Java 高并发 三部曲 》 面试必备 + 大厂必备 + 涨薪必备 免费赠送 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 大厂必备 +涨薪必备 (加尼恩领取) 免费赠送 经典图书 : 《SpringCloud、Nginx高并发核心编程》 面试必备 + 大

架构师尼恩 5万+

Sharding-JDBC按月动态分表实战样例

Sharding-JDBC是一个开源的分布式数据库中间件解决方案,用于解决大规模数据存储带来的性能瓶颈问题。它由ShardingSphere项目组开发,旨在提供轻量级、透明化的数据库分库分表解决方案。通过将大表分割为若干个更小的表,并将它们分散到不同的数据库中,Sharding-JDBC能够极大地提高数据库操作的效率,优化存储结构。

weixin_31597759的博客 967

Sharding-JDBC 分布式事务实战指南:XA/Seata 方案解析(三)

本文介绍了Sharding-JDBC分布式事务的两种实现方案:XA事务和BASE事务(Seata AT模式)。XA事务采用2PC协议保证强一致性,适用于金融交易等场景;BASE事务通过Seata实现最终一致性,适合高并发电商场景。文章详细讲解了两种事务的实战步骤,包括依赖引入、配置设置和代码实现,并分析了它们的底层原理:XA事务通过两阶段提交协议协调多库操作,Seata事务则通过TC、TM、RM三个核心组件实现分布式事务管理。同时提供了官方文档和示例代码链接,帮助开发者快速上手Sharding-JDBC分布

gorgor在码农 1578

Sharding-JDBC分布式事务应用

Sharding-JDBC分布式事务应用

VCS 2018 环境下,手把手教你用 UVMC 搞定 SystemC 和 SystemVerilog 混合仿真(附完整代码)

本文详细介绍了在VCS 2018环境下使用UVMC实现SystemC和SystemVerilog混合仿真的完整指南。从环境配置、工具链设置到UVMC通信机制解析,提供了实战案例和高级调试技巧,帮助开发者高效搭建复杂验证环境。特别适合需要处理跨语言仿真的芯片验证工程师。

weixin_30952535的博客 285

Sharding-JDBC

数据库优化的几个阶段 数据库优化的几个阶段请参考: https://www.songma.com/news/txtlist_i21939v.html 分库分表适用场景 分库分表主要用于应对当前互联网常见的两个场景——大数据量和高并发。 1.数据量大时,减少单表查询压力 2.减少单表的访问压力 3.单表数据量上百万至千万,索引性能下降 4.索引也很难在提高性能或者更新、插入数据频繁等。 Shardi...

sinat_34814635的博客 3万+

uniapp实现app版本发现新版本后,自动更新

app实现自动更新

oldolder的博客 1285

使用Sharding-JDBC进行分表分库之增删改查和分布式事务

背景         继续上篇文章《Sharding-JDBC进行分表分库之初体验》,我们写一下删改查的小例子,因为上篇文章已经有增加了,还有要尝试的就是Sharding-JDBC提供的分布式事务。 测试例子        要注意的点有两个: 1、关于修改数据的(更新和删除)。如果只是分表或分库,根据分片字段修改即可。如果是分表分库的,需要根据分表的分片字段修改。 2、关于分布式事务,一...

Howinfun的博客 7728

RK3588内核崩溃日志捕获:pstore与ramoops的实战配置指南

本文详细介绍了在RK3588嵌入式设备上配置pstore与ramoops以捕获内核崩溃日志的实战指南。通过内核配置调整、设备树设置及高级调试技巧,帮助开发者有效定位系统崩溃原因,特别适合户外智能设备等无法长期连接调试器的场景。文章还提供了生产环境优化建议,确保日志捕获的可靠性与安全性。

weixin_29189363的博客 408

SoapUI 5.0 模拟WebService接口实战:从WSDL文件到Mock服务端完整流程

本文详细介绍了如何使用SoapUI 5.0模拟WebService接口,从解析WSDL文件到搭建完整的Mock服务端流程。通过实战案例和效率技巧,帮助开发者快速掌握接口模拟技术,提升开发与测试效率。

weixin_26833139的博客 409

Sharding-JDBC分库分表

随着业务的快速发展,数据库中的数据量猛增,访问性能也变慢,优化必不可少。究其原因是关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据容量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引性能仍下降严重。

qq_41860765的博客 1793

openEuler在虚拟机的网络配置

ethernet0.virtualDev 可以配置成其他类型的虚拟网络适配器。常见的选项包括:vlance - 用于模拟 AMD PCnet32 LANCE 网络适配器,支持10Mbps。e1000 - 用于模拟 Intel E1000 千兆网络适配器,支持1Gbps。e1000e - 用于模拟更现代的 Intel E1000e 千兆网络适配器。vmxnet - 用于 VMware 的自定义网络适配器,性能更好但需要安装 VMware Tools。

FHY1221的博客 2933

分库分表之Sharding-JDBC

目录 1、Sharding-JDBC概述 2、架构回顾 3、SpringBoot集成Sharding-JDBC 3.1 准备工作 3.2 配置MySQL主从复制 3.3 引入依赖坐标 3.4 application.properties配置 3.5 启动类,pojo service,dao,test 3.6 一些需要补充的概念 4、Sharding-JDBC原理 5、分库分表带来的问题 5.1 垂直分库带来的问题和解决思路 5.2 水平分库带来的问题和解决思路 5.3 我们.

长沙老码农 6998

逆变器专题(6)-正负序分离(二阶广义积分器DSOGI)

相应仿真原件请移步资源下载DSOGI作为一种常用的正负序分离方法,其可以在电压三相不平衡的状态下实现较为精准的锁相环。

cyc19980105的博客 8808

多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】

相关文章: 1.QMIX算法简述 QMIX是一个多智能体强化学习算法,具有如下特点: 1. 学习得到分布式策略。 2. 本质是一个值函数逼近算法。 3. 由于对一个联合动作-状态只有一个总奖励值,而不是每个智能体得到一个自己的奖励值,因此只能用于合作环境,而不能用于竞争对抗环境。 4. QMIX算法采用集中式学习,分布式执行应用的框架。通过集中式的信息学习,得到每个智能体的分布式策略。 5. 训练时借用全局状态信息来提高算法效果。是后文提到的VDN方法的改进。 6. 接上一条,QMIX设计一个神经网络来

丨汀、的博客 5472

从0到1实战Sharding-JDBC:数据库分库分表的破局之道

本文系统介绍了Sharding-JDBC在分库分表领域的应用实践。首先分析了单库单表架构面临的性能瓶颈,阐述了分库分表技术的必要性。随后详细讲解了Sharding-JDBC的轻量级特性、核心功能(包括透明分片、无侵入设计、多数据库支持和分布式事务)及其适用场景。通过具体配置示例展示了分库分表规则设置、读写分离实现和分布式事务处理等关键技术要点。最后提出了SQL优化、索引调整等性能提升策略,并展望了Sharding-JDBC在技术创新、生态融合和行业应用方面的发展前景。全文为构建高效稳定的分布式数据库系统提供

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2280

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

springboot整合sharding-jdbc实现按年分库按月分表

springboot整合sharding-jdbc实现按年分库按月分表 1.前言: ​ 此方案为适用对时间依赖度较高的数据进行水平切分,如果你正好符合,那么你可以看看此篇,不符合也可以看看,毕竟sharding-jdbc对分库分表的方案实现度很高,可根据自身实际情况进行数据切分 2.分库分表概念 ​ 在做实现之前,我们需要了解到何为分库分表,为何要这样做,这样做有何利弊? ​ 由于关系型数据库的先天特性,在单表数据量达到一定体量的时候,就会出现性能瓶颈,至于具体是多少,此篇不做研究,说法众多,后期有时

weixin_47077809的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 推荐一种非侵入式幂等性的Java实现
下一篇: 手撸一个动态Feign,实现一个“万能”接口调用
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值