当前位置: 首页 > article >正文

Spring Boot项目实战:ShardingSphere 4.1.1与达梦数据库8.1.3分表配置全流程

Spring Boot项目实战ShardingSphere 4.1.1与达梦数据库8.1.3分表配置全流程在当今数据驱动的商业环境中数据库性能优化已成为开发者必须面对的挑战。当单表数据量突破千万级时查询响应速度明显下降传统解决方案如索引优化、硬件升级往往收效有限。这时分表技术便成为解决这一痛点的有效方案。本文将详细介绍如何在Spring Boot项目中使用ShardingSphere 4.1.1为达梦数据库8.1.3实现高效的分表配置。1. 环境准备与依赖配置在开始分表配置前我们需要确保开发环境准备就绪。首先创建一个标准的Spring Boot项目推荐使用Spring Initializr进行项目初始化选择Java 8和Spring Boot 2.7.x版本。核心依赖配置如下dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId /dependency dependency groupIdcom.dameng/groupId artifactIdDmJdbcDriver18/artifactId version8.1.3.140/version /dependency dependency groupIdorg.apache.shardingsphere/groupId artifactIdsharding-jdbc-spring-boot-starter/artifactId version4.1.1/version /dependency dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.2.6/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.4.2/version /dependency /dependencies提示ShardingSphere 4.1.1版本与达梦8.1.3的兼容性经过充分验证建议不要随意升级版本以避免潜在兼容性问题。数据库表结构设计是分表的基础。假设我们有一个商品表需要进行分表可以创建以下表结构CREATE TABLE TEST.GOODS_1 ( GID BIGINT, GNAME VARCHAR(50), USER_ID BIGINT, GSTATUS VARCHAR(50) ) STORAGE(ON MAIN, CLUSTERBTR); CREATE TABLE TEST.GOODS_2 ( GID BIGINT, GNAME VARCHAR(50), USER_ID BIGINT, GSTATUS VARCHAR(50) ) STORAGE(ON MAIN, CLUSTERBTR);2. ShardingSphere核心配置详解ShardingSphere的配置是整个分表功能的核心。我们需要在application.properties文件中进行详细配置# MyBatis日志配置 mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl # 允许Bean定义覆盖 spring.main.allow-bean-definition-overridingtrue # 显示SQL日志 spring.shardingsphere.props.sql.showtrue # 数据源配置 spring.shardingsphere.datasource.namesg1 spring.shardingsphere.datasource.g1.typecom.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.g1.driver-class-namedm.jdbc.driver.DmDriver spring.shardingsphere.datasource.g1.urljdbc:dm://192.168.1.10:5236/TEST spring.shardingsphere.datasource.g1.usernameSYSDBA spring.shardingsphere.datasource.g1.password******** # 分表策略配置 spring.shardingsphere.sharding.tables.goods.actual-data-nodesg1.goods_$-{1..2} spring.shardingsphere.sharding.tables.goods.key-generator.columngid spring.shardingsphere.sharding.tables.goods.key-generator.typeSNOWFLAKE spring.shardingsphere.sharding.tables.goods.table-strategy.inline.sharding-columngid spring.shardingsphere.sharding.tables.goods.table-strategy.inline.algorithm-expressiongoods_$-{gid % 2 1}配置项解析actual-data-nodes指定实际的数据节点这里表示goods表将被分散到goods_1和goods_2两个物理表中key-generator配置分布式ID生成策略使用雪花算法生成唯一IDtable-strategy定义分表策略这里采用基于gid的取模分片算法注意达梦数据库的表名和字段名区分大小写配置时需特别注意与数据库中的实际命名保持一致。3. 业务代码实现有了基础配置后我们需要实现业务代码来验证分表功能。首先定义商品实体类Data public class Goods { private Long gid; private String gname; private Long userId; private String gstatus; }接着创建Mapper接口这里使用MyBatis-Plus简化开发Repository public interface GoodsMapper extends BaseMapperGoods { }为了测试分表效果我们编写测试类SpringBootTest class SharingJdbcTestApplicationTests { Autowired GoodsMapper goodsMapper; Test void testShardingInsert() { for (int i 0; i 10; i) { Goods good new Goods(); good.setGname(商品 i); good.setUserId(100L); good.setGstatus(上架); goodsMapper.insert(good); } } Test void testShardingQuery() { QueryWrapperGoods queryWrapper new QueryWrapper(); queryWrapper.eq(gid, 1354449944638820361L); Goods good goodsMapper.selectOne(queryWrapper); System.out.println(good); } }4. 分片策略深度解析与优化ShardingSphere提供了多种分片策略我们需要根据业务特点选择最合适的方案。以下是几种常见策略的对比策略类型适用场景优点缺点标准分片明确的分片键配置简单性能好需要业务有明确分片键复合分片多维度分片支持复杂分片逻辑配置复杂Hint分片无分片键灵活性强需要手动指定路由行表达式简单分片配置简洁功能有限对于商品表的分片我们采用了行表达式策略spring.shardingsphere.sharding.tables.goods.table-strategy.inline.algorithm-expressiongoods_$-{gid % 2 1}这个表达式表示根据gid字段的值进行取模运算模数为2因为我们有2个分表结果加1是为了匹配表编号goods_1和goods_2如果需要更复杂的分片逻辑可以实现自定义分片算法public class CustomTableShardingAlgorithm implements PreciseShardingAlgorithmLong { Override public String doSharding(CollectionString tableNames, PreciseShardingValueLong shardingValue) { // 自定义分片逻辑 return goods_ (shardingValue.getValue() % 2 1); } }然后在配置中引用这个自定义算法spring.shardingsphere.sharding.tables.goods.table-strategy.standard.sharding-columngid spring.shardingsphere.sharding.tables.goods.table-strategy.standard.precise-algorithm-class-namecom.example.CustomTableShardingAlgorithm5. 性能监控与问题排查实施分表后监控系统性能至关重要。ShardingSphere提供了丰富的监控指标和日志功能。启用SQL日志可以帮助我们理解ShardingSphere的实际执行过程spring.shardingsphere.props.sql.showtrue典型日志输出示例2025-03-26 13:50:49.247 INFO 7072 --- [main] ShardingSphere-SQL : Logic SQL: INSERT INTO goods (gid, gname, user_id, gstatus) VALUES (?, ?, ?, ?) 2025-03-26 13:50:49.247 INFO 7072 --- [main] ShardingSphere-SQL : Actual SQL: g1 ::: INSERT INTO goods_1 (gid, gname, user_id, gstatus) VALUES (?, ?, ?, ?) ::: [1354452535414263808, 小米手机, 100, 已发布]常见问题及解决方案分片键选择不当症状数据分布不均匀某些分片负载过高解决重新评估分片键选择离散度高的字段跨分片查询性能差症状涉及多个分片的查询响应慢解决优化查询条件尽量带上分片键考虑使用绑定表分布式事务问题症状跨分片操作数据不一致解决启用ShardingSphere的分布式事务支持达梦数据库特有的注意事项达梦对SQL标准的实现有细微差异复杂SQL可能需要调整达梦的JDBC URL格式为jdbc:dm://host:port/DATABASE达梦默认端口是5236而非常见的3306或54326. 高级特性与最佳实践掌握了基础分表配置后我们可以进一步探索ShardingSphere的高级功能。读写分离集成 ShardingSphere可以同时配置分表和读写分离# 主库配置 spring.shardingsphere.datasource.master.typecom.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.master.driver-class-namedm.jdbc.driver.DmDriver spring.shardingsphere.datasource.master.urljdbc:dm://master-host:5236/TEST # 从库配置 spring.shardingsphere.datasource.slave0.typecom.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.slave0.driver-class-namedm.jdbc.driver.DmDriver spring.shardingsphere.datasource.slave0.urljdbc:dm://slave-host:5236/TEST # 读写分离规则 spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-namemaster spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-namesslave0分布式主键优化 默认的雪花算法可能存在性能瓶颈可以考虑使用达梦数据库自增序列需调整分片策略实现自定义分布式ID生成器使用Leaf等分布式ID服务分库分表结合 对于超大规模数据可以同时使用分库和分表# 多数据源配置 spring.shardingsphere.datasource.namesds0,ds1 # 分库策略 spring.shardingsphere.sharding.tables.goods.database-strategy.inline.sharding-columnuser_id spring.shardingsphere.sharding.tables.goods.database-strategy.inline.algorithm-expressionds$-{user_id % 2} # 分表策略 spring.shardingsphere.sharding.tables.goods.actual-data-nodesds$-{0..1}.goods_$-{0..1} spring.shardingsphere.sharding.tables.goods.table-strategy.inline.sharding-columngid spring.shardingsphere.sharding.tables.goods.table-strategy.inline.algorithm-expressiongoods_$-{gid % 2}实际项目中我们发现在达梦数据库上使用ShardingSphere时连接池配置对性能影响很大。推荐使用Druid连接池并优化以下参数# 连接池配置 spring.shardingsphere.datasource.g1.initialSize5 spring.shardingsphere.datasource.g1.minIdle5 spring.shardingsphere.datasource.g1.maxActive20 spring.shardingsphere.datasource.g1.maxWait60000 spring.shardingsphere.datasource.g1.timeBetweenEvictionRunsMillis60000 spring.shardingsphere.datasource.g1.minEvictableIdleTimeMillis300000

相关文章:

Spring Boot项目实战:ShardingSphere 4.1.1与达梦数据库8.1.3分表配置全流程

Spring Boot项目实战:ShardingSphere 4.1.1与达梦数据库8.1.3分表配置全流程 在当今数据驱动的商业环境中,数据库性能优化已成为开发者必须面对的挑战。当单表数据量突破千万级时,查询响应速度明显下降,传统解决方案如索引优化、硬…...

Python零基础入门(一)

模块一第一部分:数据的“存”与“取”(变量与标识符)变量的本质1.变量是指存储数据的容器(空间),而不是数据本身赋值过程:变量名 变量值。这里的 不是数学上的等于,而是“赋予”的…...

AppleRa1n完整指南:iOS 15-16激活锁绕过的3个关键步骤

AppleRa1n完整指南:iOS 15-16激活锁绕过的3个关键步骤 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n AppleRa1n是一款专为iOS 15至16.6.1系统设计的专业激活锁绕过工具,通过整…...

手动压铆螺母,轻松解决安装难题

在现代制造业中,高效、可靠的连接技术是确保产品质量和生产效率的关键。传统制造产线中,手动工具的使用常常导致效率低下和成本增加。本文将深入探讨手动压铆螺母在实际应用中的痛点,并介绍盾川压铆螺母应用解决方案如何通过技术创新&#xf…...

M2LOrder模型在计算机组成原理教学中的趣味应用:指令集情感化

M2LOrder模型在计算机组成原理教学中的趣味应用:指令集情感化 你有没有想过,计算机执行程序的过程,其实可以像一部有情感起伏的戏剧?那些冷冰冰的二进制指令,比如加法、跳转、存储,如果它们也有“喜怒哀乐…...

时序数据库(社区版)TDengine TSDB(安装/Docker版本)

前言TDengine 的 Docker 版本 3.4.0.0 可以免费试用。你下载并运行的 Docker 镜像,对应的就是 TDetime 社区版,这个版本自带免费许可证,可以永久免费使用。推荐:当前广泛使用且较为稳妥的 TDengine Docker 版本:3.4.0.…...

革新性VC运行库管理方案:将部署效率提升83%的企业级解决方案

革新性VC运行库管理方案:将部署效率提升83%的企业级解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题象限:企业级环境中的运行…...

飞书卡片消息实战:如何用班翎流程平台打造个性化审批通知(附配置截图)

飞书卡片消息实战:如何用班翎流程平台打造个性化审批通知 当企业审批流程遇上飞书卡片消息,信息传达效率的提升往往超出预期。想象一下,财务部门的报销审批不再需要反复点击查看详情,所有关键字段——申请人、金额、事由、单据号—…...

用AI玩转卫星照片:教你用TensorFlow实现建筑物变化自动检测(2024最新版)

用AI玩转卫星照片:教你用TensorFlow实现建筑物变化自动检测(2024最新版) 当城市以惊人的速度扩张时,传统的人工目视检查卫星影像已无法满足现代化管理的需求。去年某省会城市的一次审计中发现,仅三个月内就有47处违规建…...

Linux 命令:ldconfig —— 动态链接库管理命令

本文详细讲解 Linux 动态链接库管理命令 ldconfig,包含命令简介、语法、选项、示例及注意事项,适用于安装共享库、解决库找不到问题等场景。1. 命令简介ldconfig 是一个用于管理动态链接库(共享库)的 Linux 系统命令。它的主要功能…...

华南理工预推免面试全记录:从PPT制作到专业课突击,我的90分通关秘籍

华南理工预推免面试全记录:从PPT制作到专业课突击,我的90分通关秘籍 推开华南理工大学预推免面试室大门的那一刻,我的手心微微出汗。三个月前,我和屏幕前的你一样,面对这场关乎升学命运的考核既期待又忐忑。如今以90.2…...

避坑指南:恒源云GPUSHARE平台性能与稳定性深度实测

1. 恒源云GPUSHARE平台初体验:性能落差有多大? 第一次接触恒源云GPUSHARE平台时,我带着训练图像分类模型的任务而来。按照官方宣传,这里提供从RTX 3060到A100的多款GPU选择,价格看起来也比其他平台实惠20%左右。但实际…...

DAMOYOLO-S模型转换与部署:从PyTorch到ONNX再到TensorRT加速

DAMOYOLO-S模型转换与部署:从PyTorch到ONNX再到TensorRT加速 最近在做一个目标检测的项目,用到了DAMOYOLO-S这个模型,效果确实不错,但部署上线时遇到了点麻烦——推理速度不够理想。相信不少朋友也遇到过类似情况:训练…...

Docker实战:EMQX容器化部署与持久化配置全攻略

1. 环境准备与基础概念 在开始EMQX的容器化部署之前,我们需要先理解几个关键概念。EMQX是一款开源的MQTT消息中间件,广泛应用于物联网(IoT)场景。而Docker则是一种轻量级的容器技术,能够将应用及其依赖打包成一个标准化的单元。将两者结合&am…...

告别许愿式提问!收藏这份结构化提示词指南,带你玩转大模型智能体设计

文章指出,许多人使用大模型时效果不佳是因为采用了“许愿式”方法,未能清晰传达意图。核心方法论在于拥抱结构化提示词,如CRISPE框架,并通过五大组件(提示词、记忆系统、插件/工具、知识库、工作流)构建AI智…...

终极指南:快速绘制专业神经网络架构图的完整工具库

终极指南:快速绘制专业神经网络架构图的完整工具库 【免费下载链接】Neural-Network-Architecture-Diagrams Diagrams for visualizing neural network architecture (Created with diagrams.net) 项目地址: https://gitcode.com/gh_mirrors/ne/Neural-Network-Ar…...

Trinity v2.15.2的安装与配置经验

安装Trinity v2.15.2,我先按照常规方法用conda安装在统一的环境中,然后又安装了ai推荐的适配软件。安装时出现 Preparing transaction: done Verifying transaction: / …...

【openwrt】优化Openwrt软路由的web端口配置:安全与便捷并重

1. 为什么需要优化OpenWrt的Web端口配置 家里用软路由的朋友们应该都遇到过这样的场景:当你兴冲冲地打开浏览器准备配置路由器时,却发现页面死活打不开。这种情况很多时候都是因为端口冲突导致的。OpenWrt默认使用80端口提供Web管理界面,但这…...

【亲测】2026年3月OpenClaw零基础6分钟云端/MacOS/Linux/Windows部署教程

【亲测】2026年3月OpenClaw零基础6分钟云端/MacOS/Linux/Windows部署教程。OpenClaw是什么?OpenClaw能做什么?OpenClaw怎么部署?OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小…...

CKEditor如何实现Word文档到网页的无格式错乱粘贴?

PHP程序员的Word导入插件探索记 各位老铁们好啊!我是西安一名苦逼的PHP程序员,最近接了个CMS企业官网的活儿,客户突然甩给我个需求,让我整个人都不好了… 客户的"小"需求 客户说:“小王啊,我们…...

告别重复配置:打造VS2022+EasyX项目专属便携开发包

1. 为什么需要便携式开发包? 每次在新电脑上配置开发环境都像是一场噩梦。我记得刚开始用EasyX做图形编程时,每次换电脑都要重新下载库文件、配置包含路径、设置库目录,一套流程下来至少浪费半小时。更糟的是团队协作时,每个成员都…...

手把手教你用yz-bijini-cosplay:从安装到出图,小白也能5分钟搞定Cosplay AI创作

手把手教你用yz-bijini-cosplay:从安装到出图,小白也能5分钟搞定Cosplay AI创作 想用AI生成专业级Cosplay图片却苦于复杂的安装流程?厌倦了每次切换风格都要漫长等待?今天介绍的yz-bijini-cosplay镜像将彻底改变你的创作体验。这…...

告别爆显存!Bidili Generator保姆级教程:SDXL模型一键部署,轻松生成定制图片

告别爆显存!Bidili Generator保姆级教程:SDXL模型一键部署,轻松生成定制图片 如果你对AI绘画感兴趣,一定听说过Stable Diffusion XL(SDXL)的大名。它生成的图片质量确实惊艳,细节丰富&#xff…...

3.1811111drfva

...

为什么电阻分压给MCU供电不靠谱?实测数据告诉你真相

为什么电阻分压给MCU供电不靠谱?实测数据告诉你真相 在电子设计初学者的世界里,电源转换常常被视为"黑箱操作"——直到某天你发现用两个电阻搭建的分压电路给单片机供电时,程序开始随机崩溃,屏幕闪烁不定。这背后隐藏着…...

低空经济赛道——深圳低空经济发展规划

摘要 深圳规划2026年建成1200个起降点,配套5G-A基站8000个,预计带动物流、文旅产业规模增长30%。本文分析了深圳低空经济规划的整体布局、基础设施建设和产业发展前景。规划概述 1. 总体目标 深圳低空经济规划2026目标: ┌───────────────…...

CasRel关系抽取实战案例:智能问答系统底层结构化数据生成方法

CasRel关系抽取实战案例:智能问答系统底层结构化数据生成方法 1. 从文本到知识:为什么需要关系抽取? 想象一下,你正在搭建一个智能问答系统。用户问:“苹果公司的创始人是谁?” 系统需要理解“苹果公司”…...

SenseVoice-Small语音识别模型ONNX量化部署教程:3步快速上手

SenseVoice-Small语音识别模型ONNX量化部署教程:3步快速上手 语音识别技术正在变得越来越普及,从手机助手到会议纪要,再到智能家居,到处都能看到它的身影。但对于开发者来说,想把一个效果不错的语音识别模型集成到自己…...

AnimateDiff与3D引擎结合:混合现实内容生产

AnimateDiff与3D引擎结合:混合现实内容生产 1. 引言 想象一下,你正在为一个虚拟展览设计互动内容,需要快速生成一段展示产品特性的动画视频。传统方式需要设计师手动制作每一帧,耗时耗力。而现在,通过AnimateDiff与3…...

专业的上海烘焙培训哪家好

对于希望学习烘焙技术的朋友,上海作为国内西点烘焙行业较为活跃的城市,提供了不少培训选择。在考虑培训机构时,建议您从以下几个方面进行综合评估:考察培训机构的几个要点:课程体系与产品更新:了解课程内容…...