线上问题——【面试题】Mybatis-plus 整合 ShardingSphere-JDBC,调用批量方法执行更新操作扫所有分表问题

ShardingSphere面试题 客户端层负责接收应用程序的数据库请求,中间层是 ShardingSphere 的核心组件,负责路由、分片、事务协调等功能,数据源层包含多个数据库实例,用于存储和处理数据。在分布式事务中,ShardingSphere 会协调各个参与者数据库的事务,包括提交、回滚和异常处理。分库分表是将数据库中的数据按照某个规则分散存储在不同的数据库实例或表中的过程。ShardingSphere 的读写分离是通过配置数据源和路由规则来实现的。不同的分片策略适用于不同的场景,可以根据需求选择合适的策略。 阅读详情
AI摘要

本文记录了ShardingSphere整合MyBatis-Plus进行批量更新时扫所有分表问题的原因及解决方案。批量插入时,数据能按分片规则分散到各分片表;批量更新时,会扫描所有分表。原因是批量更新以id主键为where条件,分片规则失效。解决方案有轮询带条件更新、将id设为分片键等。

记录下 ShardingSphere 整合 mybatis-plus 进行批量更新时扫所有分表问题的原因及解决方案。ShardingSphere 整合 mybatis-plus 与整合 mybatis 流程是一样的,一个是导入 mybatis 包,一个是导入 mybatis-plus 包,在 ShardingSphere-JDBC —— 数据分片详细讲解 介绍了 ShardingSphere 分布分表及整合 mybatis 的使用示例,这里就不在赘述整合使用过程了。

过程及问题描述

在使用 ShardingSphere 整合 mybatis-plus 并调用 saveOrUpdateBatch() 批量插入或更新方法,发现数据批量插入时,ShardingSphere 的分片规则会根据分片键的值将数据正确地分散到各个分片表中;而数据批量更新时,会扫描所有分表进行更新。这是什么原因呢?

首先看我是如何使用的。

  1. 数据表的设计,表字段如下,id 自增主键、text 唯一索引。这里建 32 张分表,test_table_0 … test_table_31

    CREATE TABLE `test_table` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
      `text` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '文本内容',
      `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `text` (`encrypt_text`) USING BTREE,
      KEY `idx_user_id` (`user_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='文本';
    
  2. ShardingSphere 相关配置,详细配置不再降速,就看看数据库表分片配置。这里设置 text 字段作为分片键。

    @Bean(name = "textTableTableRuleConfig")
    public TableRuleConfiguration textTableTableRuleConfig() {
        String tableName = "test_table";
        String actualDataNodes = "dataSource.test_table_${0..31}";
        // 分片键
        String shardingColumns = "text";
    
    	// 表规则配置
        TableRuleConfiguration configuration = new TableRuleConfiguration();
        configuration.setLogicTable(tableName);	// 设置逻辑表名
        configuration.setActualDataNodes(actualDataNodes); // 设置实际分表节点
        // 分片策略,UserEncryptTextTableAlgorithm 为自定义分片算法
        ShardingStrategyConfiguration tableShardingStrategyConfig = new StandardShardingStrategyConfiguration(
            shardingColumns, new UserEncryptTextTableAlgorithm());
    	// 数据库没分库,不用分片策略;数据表分表,设置分片策略。
        configuration.setDatabaseShardingStrategyConfig(new NoneShardingStrategyConfiguration());
        configuration.setTableShardingStrategyConfig(tableShardingStrategyConfig);
        return configuration;
    }
    

    分片算法。使用 PreciseShardingAlgorithm,是 ShardingSphere 提供的精确分片算法接口,用于处理单一分片键的分片规则。

    @Configuration
    public class UserEncryptTextTableAlgorithm implements PreciseShardingAlgorithm<String> {
    
        /**
         * availableTargetNames:可用的分片目标名称集合,即分片规则所涉及的所有分片表的集合。
         * shardingValue:PreciseShardingValue 对象,表示单一分片键的值。
         */
        @Override
        public String doSharding(Collection<String> collection, PreciseShardingValue<String> shardingValue) {
            StringBuffer tableName = new StringBuffer();
            // shardingValue.getValue():分片键的值
            String tableSuffix = String.valueOf(Math.abs(shardingValue.getValue().hashCode()) % 32);
            tableName.append(shardingValue.getLogicTableName()).append("_").append(tableSuffix);
            return tableName.toString();
        }
    }
    
  3. 业务代码操作数据表,这里调用 mybatis-plus 的批量方法。

    // mybatis-plus 操作数据库服务类
    @Autowired
    private ITestTableService iTestTableService;
    
    public static void main(String[] args) {
    	List<TestTable> testTableList = new ArrayList<>();
    	TestTable updateInfo· = new TestTable();
        updateInfo1·.setText("test1");
        updateInfo1·.setId(1);
        updateInfo1·.setCreateTime(new Date());
        testTableList.add(updateInfo1);
        TestTable updateInfo1 = new TestTable();
        updateInfo2.setText("test2");
        updateInfo2.setId(2);
        updateInfo2.setCreateTime(new Date());
        testTableList.add(updateInfo2);
        iTestTableService.saveOrUpdateBatch(testTableList);
    }
    
  4. 运行结果

    配置 ShardingSphere 数据源时开启sql打印,方便在控制台查看输出的sql语句。

    Properties prop = new Properties();
    prop.setProperty(ShardingPropertiesConstant.SQL_SHOW.getKey(), true);
    

    运行条件:假设 updateInfo1 的数据已存在与表中,updateInfo2 的数据在表中不存在。在进行 iTestTableService.saveOrUpdateBatch(testTableList); 运行后。

    insert 语句只打印了一次。
    INSERT INTO test_table_10(id, text, create_time, update_time) VALUES (?,?, ?, ?);

    update 语句只打印了32次。
    UPDATE table_name_0 SET id = ?, text= ?, create_time = ?, update_time = ? WHERE id = ?;
    UPDATE table_name_1 SET id = ?, text= ?, create_time = ?, update_time = ? WHERE id = ?;
    …
    UPDATE table_name_32 SET id = ?, text= ?, create_time = ?, update_time = ? WHERE id = ?;

    看表中数据,32 张表中只有一张表中插入了 updateInfo2 的数据,说明只执行了一次 insert 操作,而且按分片规则落到指定的分表中;而 updateInfo1 在表中的数据已被修改了,说明更新了,是否是只执行了一次 update 操作呢?继续分析。

  5. 分析及结论

    那打印了 32 次 update 语句,是否执行了 32 次 update 操作呢?首先看打印的 sql,saveOrUpdateBatch() 批量 update 操作打印的sql,where 条件是 id = ?,那我在另外一张不存在 updateInfo1 数据的表中插入一条数据,其 id 也等于1,再执行一遍更新操作,发现两张表的 updateInfo1 数据都进行了更新,说明确实执行了 32 次 update 操作。

    查看打印的 update sql 语句,可以看出 mybatis-plus 的 saveOrUpdateBatch() 操作批量更新时,是以 id 主键作为 where 条件来索引更新,而 id 主键又不是分片键,分片规则失效,所以每一次 update 都会扫所有分表。而对于 insert 操作,可以理解插入的字段包含 id 主键和 text 唯一索引,且 text 作为分片键,所以插入时会解析到包含分片键 text,会先进行分表定位到具体表,再插入。

原因及方案

针对 update 操作的问题:

  1. 于是,我再使用 mybatis-plus 的 saveOrUpdate(T entity); 方法与 saveOrUpdate(T entity, Wrapper updateWrapper); 方法单独对 updateInfo1 进行更新操作。(mybatis-plus 现象)

    iTestTableService.saveOrUpdate(updateInfo1);
    与
    iTestTableService.saveOrUpdate(updateInfo1, Wrappers.<UserEncryptText>lambdaUpdate().eq(UserEncryptText::getText, updateInfo.getText()));
    

    这两种更新操作的结果为:不带条件的还是扫描所有分表,带条件能定位到具体分表进行更新。说明在进行 saveOrUpdate(updateInfo1) 操作更新时,mybatis-plus 默认是使用主键索引作为 where 条件进行索引的;使用 saveOrUpdate(updateInfo1, Wrappers) 操作更新时才会使用指定的 where 条件。

  2. 其次,我更改分片键,使用多字段分片键的分片策略,id 与 text 字段都作为分片键。(ShardingSphere 现象)

    String shardingColumns = "id,text";
    ShardingStrategyConfiguration tableShardingStrategyConfig = new ComplexShardingStrategyConfiguration(
       shardingColumns, new UserEncryptTextTableAlgorithm());
    

    分片算法。使用 ComplexKeysShardingAlgorithm,是 ShardingSphere 中用于处理复合分片键的分片算法接口。该接口定义了根据多个分片键进行分片的方法。这里简单处理,同时存在 id、text 或 text 都映射到 text 作为分片键,只有 id 分片键就默认分到0表。

    public class UserEncryptTextTableAlgorithm implements ComplexKeysShardingAlgorithm {
        @Override
        public Collection<String> doSharding(Collection<String> collection, Collection<ShardingValue> collection1) {
            List<String> list = new ArrayList<>();
            Optional<ShardingValue> optional = collection1.stream()
                .filter(x -> StringUtils.equals(x.getColumnName(), "text")).findFirst();
            if (!optional.isPresent()){
            	StringBuffer tableName = new StringBuffer();
    	        tableName.append(shardingValue.getLogicTableName()).append("_").append(0);
                list.add(tableName.toString());
                return list;
            }
            ListShardingValue shardingValue = (ListShardingValue)optional.get();
            Collection values = shardingValue.getValues();
            values.forEach(value -> {
                StringBuffer tableName = new StringBuffer();
            	String tableSuffix = String.valueOf(Math.abs(shardingValue.getValue().hashCode()) % 32);
            	tableName.append(shardingValue.getLogicTableName()).append("_").append(tableSuffix);
                list.add(tableName.toString());
            });
    
            return list;
        }
    }
    

    1、当条件为 where id = ? 时,分片算法中的入参 collection1 集合中只有 id 分片键对象,只能使用 id 分片键进行分片算法,这里直接操作了 0 表;
    2、当条件为 where text = ? 时,分片算法中的入参 collection1 集合中只有 text 分片键对象,使用 text 分片键进行分片算法,锁定操作某一个分表;
    3、当条件为 where id = ? AND text = ? 时,分片算法中的入参 collection1 集合中有 id 和 text 分片键对象,使用 text 分片键进行分片算法,锁定操作某一个分表;
    4、当条件为 where create_time = ? 等其他非分片键时,直接跳过分片算法,不会调用到分片算法,然后会扫描所有分表;

    所以在进行 update 操作时,可以理解会先解析 where 条件,判断包含了哪些分片键,并以这些分片键按照分片算法逻辑进行分表定位到具体表,再插入;若一个分片键都不包含,分片算法失效,直接扫所有分表操作。

最终如何进行批量更新操作:

  1. 方案一:轮询使用带条件的更新操作,如:saveOrUpdate(updateInfo1, Wrappers) 、update(updateInfo1, Wrappers)
  2. 方案二:若要使用 saveOrUpdateBatch() 方法,将 id 设置为分片键,并且要保证 id 分片键与 text 分片键进行分片算法时能得到相同的分表。(上面示例并没有实现,只是为了简单演示。)
面试:ShardingSphere问题 ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,主要由 JDBC、Proxy 组成。这两个产品均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。ShardingSphere是一个功能强大的数据库中间件,可用于解决分布式数据库架构中的多种挑战,包括数据分片、读写分离、分布式事务、影子库、数据加密等,从而提高了系统的性能、扩展性和可用性。ShardingSphere 保留了非常多的功能扩展。 阅读详情

相关推荐

ShardingSphere分库分表教程,java后端开发面试题

???? 简介:Java领域优质创作者????、优快云哪吒公众号作者✌ 、Java架构师奋斗者???? ???? 扫描主页左侧二维码,加入群聊,一起学习、一起进步 ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? 目录 一、分库分表 二、分库分表的方式 1、垂直分表 2、垂直分库 3、水平分表 4、水平分库 三、分库分表带来的问题 1、学习成本问题 2、事务问题 3、跨节点join问题 4、跨节点的count、order by、group by以及聚合函数问题 5、数据迁移、容量规划、扩

m0_64205716的博客 3016

ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表

ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表课程目标快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。 Sharding-JDBCSharding-JDBC是Sharding-Sphere的第一个产品,也是Sharding-Sphere的前身,是当当网开源的一个产品。定位为轻量级的Java框架,在Java的JDBC层提供额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。他们均提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-JDBC可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种方式配置,开发者可根据场景选择适合的配置方式。课程特色 本章节以尽量短的时间,为使用者提供最简单的ShardingSphere的快速入门。课程说明该课程属于系列课程,分为读写分离,分库不分表,不分库分表,分库分表,读写分离+分库分表共5个回合。本课程属于其中一个回合,请各位小哥哥们注意,课程的标题哦~

Java后端面试题如何回归真实工程场景

Java后端开发中的核心概念(如线程安全、事务管理、索引优化)本质上是解决高并发、分布式、数据一致性等系统性问题的工程工具。其原理需结合JVM内存模型、Spring事务传播机制、MySQL查询优化器行为等底层逻辑理解;技术价值在于保障系统可用性、一致性和可观测性;典型应用场景覆盖电商秒杀、订单履约、实时风控等复杂业务系统。本文以真实故障案例为线索,将HashMap线程不安全、Spring事务失效等高频面试题,还原为库存超卖、状态更新丢失等可度量、可验证、可调优的工程问题,强调从‘背答案’到‘建能力’的认知跃

weixin_34167819的博客 320

ShardingSphere-JDBC 介绍和基本概念

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。定位为轻量级Java框架,在Java的JDBC层提供的额外服务。

qq_24872115的博客 1290

Jeepay开源Java支付系统实战指南:架构、部署与避坑

开源支付系统是Java后端工程师在金融级业务中高频接触的领域模型实践载体。其核心在于统一多渠道(微信、支付宝等)接入、保障事务一致性、实现幂等与对账能力。基于Spring Boot的分层架构设计,既规避了微服务过度复杂化风险,又通过事务传播、乐观锁、自研验签等手段满足监管与稳定性要求。技术选型上,Java凭借成熟的事务控制、审计日志和JVM可观测性,在支付场景中显著优于Go或Node.js。实际落地涉及JDK兼容性、MySQL 8.0配置、Redis连接、渠道沙箱调试及生产监控五大关键环节,尤其需关注GC调

weixin_34007020的博客 309

MCGS触摸屏数据记录与U盘导出配置全解析

在工业自动化现场,数据记录是设备运行状态分析与故障追溯的基础。HMI触摸屏作为人机交互核心,不仅承担实时监控任务,还负责过程数据的存储与导出。理解数据采集周期、存盘机制与存储介质的匹配原理,能帮助工程师高效配置数据记录功能。合理运用定时存盘、存盘组与U盘导出,可支撑设备趋势分析、报表生成及事故排查。本文以MCGS触摸屏为例,详解数据记录的完整组态流程,并汇总常见配置陷阱与排查思路,为现场调试与长期运维提供可落地的技术参考。

weixin_34253126的博客 461

Spring Boot + MyBatis-Plus 多数据源动态切换与读写分离实战

数据源是Java连接数据库的统一抽象,多数据源场景下如何动态路由成为关键。Spring 提供的 AbstractRoutingDataSource 可通过线程上下文实现运行时切换,结合 AOP 切面和 ThreadLocal,可优雅实现读写分离。这种动态数据源方案不仅解决了多库连接管理问题,还能在保持业务代码低侵入的同时灵活路由。在订单中台、报表服务等场景中,主从分离与多库隔离需求普遍,Spring Boot 与 MyBatis-Plus 的集成方案正是落地该架构的实用路径。本文基于自研动态路由与组件化配置

weixin_33912246的博客 401

Win10环境下VS2019离线部署OnnxRuntime的完整指南

本文提供了在Windows 10系统下,为Visual Studio 2019进行OnnxRuntime离线部署的完整教程。针对网络受限环境,详细讲解了如何获取正确的离线安装包、配置本地NuGet源,并逐步指导项目配置与测试,确保AI模型在C++环境中顺利运行。

weixin_29205061的博客 401

《Java 100 天进阶之路》第89篇:MySQL面试压轴题(2026版)

摘要:覆盖存储引擎、事务MVCC、锁机制、SQL优化与工具链、高可用架构、分库分表等 45+ 道高频面试题。深度剖析 InnoDB vs MyISAM、MVCC 原理、死锁排查、深分页优化,并新增 AI 辅助慢 SQL 诊断、Optimizer Trace / 直方图调优、云原生 Serverless 数据库选型 等 2026 前沿视角。每个考点配套标准话术 + 加分回答 + 实战经验。面试突击,这一篇就够了。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 4878

Full Range && Limit Range

Full Range && Limit Range1 Full range和Limit Range定义2 为什么会需要Limit Range3 用Full range去显示limit Range图片4 YUV转RGB5 额外 1 Full range和Limit Range定义 我们知道,对于RGB和YUV的色彩空间来说,有个位深(bit-depth)的概念;位深是指记录图像每个像素的色彩通道时所使用的bit数,常见的RGB888,YUV420-8bit。以RGB888为例,其代表R G B

zjhcj1的博客 1万+

HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)

本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。

weixin_29192141的博客 1050

Java开发必知必会的MySQL核心知识点(一)-基础入门:从零开始认识数据库核心

《Java开发者必备:MySQL核心知识体系精讲》摘要 本文针对Java开发者系统梳理MySQL知识体系,揭示大多数开发者仅停留在"会用"层面的现状。文章分为5篇系列教程,涵盖: 基础架构(Server层/引擎层、SQL执行流程) 索引原理与优化(B+Tree、覆盖索引) 事务与锁机制(ACID、MVCC) 高级架构(主从复制、分库分表) 实战面试精讲;

专注Java后端开发,分享SpringBoot微服务、高并发优化、生产环境踩坑实录,帮你少走弯路,让我们一起从CRUD进阶到架构师。 309

树莓派介绍与可安装的操作系统

树莓派是一款由英国树莓派基金会开发的信用卡大小的微型计算机。处理器(CPU)内存(RAM)图形处理器(GPU)USB 接口网络接口(以太网和 Wi-Fi)视频输出(HDMI)音频输出用户只需添加电源、存储卡、显示器和输入设备(键盘、鼠标),就可以将其当作一台功能齐全的电脑使用。主要特点:低成本:价格亲民,适合教育和个人项目。小巧便携:体积小,便于携带和部署。功能强大:支持多种编程语言和操作系统,功能不逊于传统电脑。树莓派从最初的教育工具发展成为功能强大的多用途平台。最新的树莓派 5。

像风一样自由的博客 2198

90篇JAVA高级深度分析与实践文章:做AI的主人,代码直接可用,附完整目录

以AI盛行的当下,我们该充实自己,还是当AI的附庸——这几乎是每个技术人都在深夜叩问过自己的问题。当IDE插件能自动补全整段代码,当ChatGPT可以解释任何源码,当"10倍效率工程师"的口号响彻云霄,我们似乎站在一个十字路口:是深度钻研底层原理,还是学会更优雅地"调用API"?这套《90篇JAVA高级深度分析与实践文章,代码直接可用》系列,给出的答案出乎意料地笃定——真正的危机不是被AI取代,而是止步于"会用AI",却不懂"AI在做什么"。

雨1986的博客 376

OpenClaw实操:给网站装上“智能眼睛”?手把手教你用OpenClaw实时监控网站

本文介绍如何在Windows系统使用OpenClaw构建智能网站监控助手。手把手教你通过配置本地AI模型,让openclaw构建的ai助手自动检测指定网页的内容变化,理解更新重要性,并及时通过邮件、微信、Telegram等渠道发出预警,让你第一时间掌握关键信息,彻底告别手动刷新。

plawuyue的博客 2163

华为OD机试真题 新系统 2026-08-16 Python&JS【智能家居模式调度优化】

智能家居系统中有多个自动化联动模式,每个模式 modes[i]=[start_time,end_time,power],表示它在左闭右开区间 [start_time,end_time) 内持续消耗固定功率 power。

MISAYAONE的博客 85

90篇JAVA高级工程师深度进阶文章,从实践案例、项目代码出发,用事实说话

在这里,不聊虚的,不抄八股文。每一个知识点,都配上可运行的代码、压测数据或故障复盘。如果你厌倦了浮于表面的教程,渴望看到技术在高并发、复杂业务场景下的真实模样,那么,欢迎走进这个系列——我们用事实说话,用代码交锋。

雨1986的博客 1105

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

shardingsphere 集成 SpringBoot 批量更新失败

在近期的项目中引入了 shardingSphere 分库分表,排查过后发现失败的原因是分库分表字段未匹配。我们举个栗子,我们这边分库分表的字段为 projectId。正常来说只要有传入 projectId 作为查询条件中的拦截器会自动去根据我们的分库分表规则进行拼接新的sql语句。但实际上根据测试结果所得发现只有在第一次foreach时才会更加分库分表规则进行对sql进行自动拼接。错误如下图代码所示:" > updateset" > updateset" > updateset。

Harswlgb的博客 1624

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

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

分表分库之ShardingSphereJDBC

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的标准和生态。

Sumuxi9797926的博客 2493

visio安装包

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

填坑:sharding-sphere不支持多条Sql语句的批量更新

sharding-sphere分库分表,批量更新的问题

fang0604631023的博客 4491

ShardingSphere:SpringBoot2+MybatisPlus读写分离+分表

课程目标快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,shardingSphere定位为关系型数据库中间件。Sharding-JDBCSharding-JDBC是Sharding-Sphere的第一个产品,也是Sharding-Sphere的前身,是当当网开源的一个产品。定位为轻量级的Java框架,在Java的JDBC层提供额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。他们均提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-JDBC可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种方式配置,开发者可根据场景选择适合的配置方式。课程特色 本章节以尽量短的时间,为使用者提供最简单的ShardingSphere的快速入门。课程说明该课程属于系列课程,分为读写分离,分库不分表,不分库分表,分库分表,读写分离+分库分表共5个回合。本课程属于其中一个回合,请各位小哥哥们注意,课程的标题哦~

理论+实战,详解Sharding Sphere-jdbc

Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品:ShardingSphere-Proxy和ShardingSphere-JDBC。

华为云官方博客 2610

解决sharding jdbc 不能使用批量更新数据

百度了相关资料,sharding jdbc未对批量修改改写表名支持并且未来也不会进行支持,会导致分布式表名不一致的问题(可能需要修改多个表中的数据)第一条修改数据sql的表明由sharding改写为对应的表名,之后的所有sql表名都未改写造成批量修改失败。1、根据分片配置信息计算出对应的表名。2、SQL中指定表名(请自行实现)

yyongsheng的博客 1690

ShardingSphere-JDBC篇

sharding介绍+案例

weixin_43410352的博客 3129

mybatis plus + shardingsphere读写分离+分表

mybatis plus是国内基于mybatis做出一个开源工具包,是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。简单来说就是代替mybatis的一个orm访问工具,但是功能更强大,这里不多赘述,因为我们就是用它的orm功能,其他的查看文档。官方文档官方文档。

阿萨的专栏 4853
上一篇: elastic-job 定时任务 —— elasticjob 介绍与使用教程
下一篇: Linux 命令 —— top命令(动态查看进程信息)
ShareBeHappy_Qin
博客等级 码龄9年 2321粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值