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

MySQL分库分表的实现(二)--水平分表

本文介绍下使用Sharding-JDBC实现水平分表Sharding-JDBC是轻量级的 java 框架是增强版的 JDBC 驱动,使用Sharding-JDBC可以简化对分库分表之后数据相关操作。下面分别介绍下水平分表的方法。1、准备好数据库和数据表先创建一个course_db数据库然后创建2张表course_1和course_2两张表的数据结构一样使用下面的sql完成建表。SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for course_1 -- ---------------------------- DROP TABLE IF EXISTS course_1; CREATE TABLE course_1 ( cid bigint NOT NULL, cname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, user_id bigint NOT NULL, cstatus varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, PRIMARY KEY (cid) USING BTREE ) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT Dynamic; SET FOREIGN_KEY_CHECKS 1;建好course_1后将上面的SQL表名改成course_2完成course_2的创建。2、创建springboot工程使用springboot脚手架创建一个maven工程项目使用jdk1.8和Springboot 2.2.1.Release版本2.1 pom.xml引入依赖dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId /dependency dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-starter/artifactId version1.1.20/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId /dependency dependency groupIdorg.apache.shardingsphere/groupId artifactIdsharding-jdbc-spring-boot-starter/artifactId version4.0.0-RC1/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.0.5/version /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency /dependencies重点说下这2个依赖1、sharding-jdbc-spring-boot-starterSharding-JDBC的核心依赖2、druid-spring-boot-starter数据库连接池如果使用springboot内置的HikariCP连接池则不用引入该依赖。注意使用的连接池不同application里的配置需做相应的调整本文使用阿里的druid。2.2 配置application.properties这是实现Sharding-JDBC管理分库分表的核心操作可以选择使用yaml,yaml配置可参考官网https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/yaml-config/# shardingjdbc 分片策略 # 配置数据源给数据源起名称 spring.shardingsphere.datasource.namesm1 # 一个实体类对应两张表覆盖 spring.main.allow-bean-definition-overridingtrue #配置数据源具体内容包含连接池驱动地址用户名和密码 spring.shardingsphere.datasource.m1.typecom.alibaba.druid.pool.DruidDataSource spring.shardingsphere.datasource.m1.driver-class-namecom.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.m1.urljdbc:mysql://192.168.56.10:3309/course_db?serverTimezoneGMT%2B8 spring.shardingsphere.datasource.m1.usernameroot spring.shardingsphere.datasource.m1.passwordroot #指定 course 表分布情况配置表在哪个数据库里面表名称都是什么 m1.course_1 ,m1.course_2 spring.shardingsphere.sharding.tables.course.actual-data-nodesm1.course_$-{1..2} # 指定 course 表里面主键 cid 生成策略 SNOWFLAKE spring.shardingsphere.sharding.tables.course.key-generator.columncid spring.shardingsphere.sharding.tables.course.key-generator.typeSNOWFLAKE # 指定分片策略 约定 cid 值偶数添加到 course_1 表如果 cid 是奇数添加到 course_2表 spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-columncid spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expressioncourse_$-{cid % 2 1} # 打开 sql 输出日志 spring.shardingsphere.props.sql.showtrue上面主要配置以下信息数据源、表分布情况、主键生成策略、主键名、表的分片策略、sql输出生产环境建议关闭这里重点说下1、表的分片策略约定 cid 值为偶数则添加到 course_1 表为奇数添加到 course_2表通过表达式来实现course_$-{cid % 2 1}如果想id为奇数存到_1表偶数存到_2表则表表达式后面的1去掉2、当主键生成策略使用雪花算法SNOWFLAKE时数据库表的id最好声明为bigint实体类中id的类型需声明为Long要不然将不会使用雪花算法生成id。2.3 编写测试代码在单元测试中编写方法验证上面的水平分表是否生效SpringBootTest class ShardingjdbcdemoApplicationTests { Resource private CourseMapper courseMapper; //1、测试水平分表 //添加课程的方法 Test public void addCourse() { for(int i1;i10;i) { Course course new Course(); course.setCname(javai); course.setUserId(100L); course.setCstatus(Normal); courseMapper.insert(course); } } //查询课程的方法 Test public void findCourse() { QueryWrapperCourse wrapper new QueryWrapper(); wrapper.eq(cid,1240359224765054976L); Course course courseMapper.selectOne(wrapper); System.out.println(course); } }执行单元测试会发现1、添加操作中当cid为奇数时数据存到course_2表为偶数时存在到course_1表2、查询操作中cid为偶数则查询course_1表。可通过查看IDEA控制台打印出来的信息重点关注Logic SQL和Actual SQL其中Actual SQL是实际执行的库和表。3、拓展数据库连接池比较连接池核心优点核心缺点适用场景HikariCP1. 性能极致速度最快、内存占用最低2. 代码轻量约 130KB3. 自动超时回收、低延迟4. Spring Boot 2.x 默认内置1. 监控功能弱无可视化2. 扩展功能少仅核心连接池能力绝大多数生产环境、追求高性能 / 低资源占用的场景微服务、高并发Druid阿里1. 监控能力极强SQL 监控、慢查询、连接池状态2. 自带防 SQL 注入、加密配置3. 扩展功能丰富过滤器、统计4. 国内文档 / 社区支持好1. 性能略逊于 HikariCP2. 配置项多、相对重国内企业项目、需要精细化监控 / 安全管控的场景电商、金融Tomcat JDBC Pool1. Tomcat 内置、无需额外依赖2. 稳定、轻量3. 支持高可用配置1. 性能不如 HikariCP2. 监控 / 扩展能力弱Tomcat 容器内的简单项目、中小流量场景C3P01. 老牌稳定、兼容性好2. 支持配置持久化3. 自动重连机制完善1. 性能差高并发下卡顿2. 代码老旧、维护少3. 内存泄漏风险老项目维护、低并发场景不推荐新项目使用DBCP2Apache1. 开源成熟、配置灵活2. 支持多种连接验证方式1. 性能一般2. 监控能力弱3. 高并发下稳定性不如 HikariCP老项目如基于 Spring Boot 1.x 的项目、非核心业务

相关文章:

MySQL分库分表的实现(二)--水平分表

本文介绍下使用Sharding-JDBC实现水平分表 Sharding-JDBC是轻量级的 java 框架,是增强版的 JDBC 驱动,使用Sharding-JDBC可以简化对分库分表之后数据相关操作。下面分别介绍下水平分表的方法。 1、准备好数据库和数据表 先创建一个course_db数据库,然…...

B2B战略咨询在行业竞争中实现差异化突围

在激烈的行业竞争中,B2B战略咨询发挥了重要作用。通过创新解决方案和个性化服务,企业能够实现显著的差异化,从而提升市场竞争力。咨询公司首先需要进行深入的市场需求分析,以识别客户的真实需求和痛点。这一过程帮助企业围绕客户体…...

第七届人工智能、网络与信息技术国际学术会议(AINIT 2026)

第七届人工智能、网络与信息技术国际学术会议(AINIT 2026)将于2026年5月15-17日在中国大连举行。本届会议将主要关注人工智能、网络与信息技术面临的新的挑战问题和研究方向,着力反映国际人工智能、网络与信息技术相关技术研究的最新进展。大…...

3·15曝光后深度解析:AI“投毒”与幻觉乱象,GEO技术困局与破局之道

2026年央视315晚会曝光的GEO(生成式引擎优化)黑产,给所有AI领域技术从业者(程序员、算法工程师、数据工程师等)敲响了警钟——批量虚假信息“投毒”污染大模型,导致多个主流大模型在“2026年315晚会”这一基…...

小龙虾时代:用于安全连接——内网穿透工具Tailscale 实用手册

Tailscale 在linux Windows 场景下的使用***这里的linux以ubuntu为例,mac同理适合: 你有一台 Ubuntu 桌面机(比如养小龙虾放资料)你想从 Windows 安全地连接过去你把 安全 放在第一位你希望这份说明能 拿来就用1. Tailscale 到底是…...

担心 openclaw 软件带毒?域卫 Yvevos 帮你一键系统级隔离风险

高权限软件运行的最佳解决方案在日常工作中,OpenClaw 是一款功能强大的工具,但它需要接管操作系统所有权限。这也导致了很多兄弟不敢用,心里直打鼓:“万一这个软件带毒怎么办?它权限这么大,会不会把我的主机…...

8.3负载生成工具

8.3 负载生成工具 实时性测试不仅要满足系统空载或低负载时的时延要求,还必须满足高负载情况下的时延要求。 通过负载生成工具模拟高负载场景进行压力测试,是评估实时系统在高负载情况下的稳定性和可靠性的有效手段。 压力测试是一种破坏性的测试&…...

vue-django flask+uniapp 小程序 特色农产品商城购物交易系统

目录技术选型与架构设计核心功能模块关键技术实现测试与部署扩展性设计项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 前端框架:UniApp(跨端开发&#xff…...

五相svpwm调制。 (五相永磁同步电机矢量控制,相邻四矢量,二矢量,文档说明+)

五相svpwm调制。 (五相永磁同步电机矢量控制,相邻四矢量,二矢量,文档说明)五相电机的矢量舞蹈比三相系统有趣得多。当我们把传统的三相桥臂拓展到五相时,电压矢量的分布从六边形变成了十边形,就…...

晶振激励功率和负性阻抗实测及计算方法

尽管在晶振振荡电路设计之前,我们都会从IC方案中获取晶振相关信息,如晶振封装、频率、频差、负载电容、工作电压等,但在晶振实际电路应用中,我们却会遇到一些具体问题,比如按照BOM采购晶振,在电路板上电后&…...

Kotlin的reified泛型:在运行时保留类型信息

Kotlin的reified泛型:在运行时保留类型信息 在Java的泛型系统中,类型擦除是一个广为人知的限制——泛型类型信息在编译后会被擦除,导致运行时无法直接获取类型参数的具体信息。Kotlin通过reified关键字打破了这一限制,允许开发者…...

英语基础输入提升指南

英语基础输入提升指南 目标人群:出国旅游基础对话、日常看懂基础英文(路牌、菜单、简单新闻) 核心原则:i1 理论(材料难度略高于当前水平,但可理解) 生成时间:2026-03-17&#x1f4cc…...

飞函如何把即时通讯、会议和云盘真正做成一体化协同底座

很多企业已经配置了不少“协同工具”:一个聊天软件、一个会议系统、一个网盘,再加上 OA、ERP、CRM 等业务系统。表面看功能齐全,实际落地时却经常出现同一个问题: 沟通、决策、文件和执行是分开的。 研发在群里讨论需求,会议里敲定…...

Spring的@Configuration注解:深入解析与实战指南

Spring的Configuration注解:深入解析与实战指南 在Spring框架中,Configuration注解是一个非常重要的注解,用于标记一个类为配置类。配置类用于定义和管理Spring容器中的Bean。本文将深入探讨Configuration注解的使用,帮助你更好地…...

保姆级STM32CubeMX入门攻略(CSDN博客版)

一、下载前准备:避坑清单先收好1. 拒绝第三方资源:别信“百度网盘破解版”“精简版”,不仅有病毒风险,还会缺固件包,安装后报错找不到芯片; 2. 必备环境:STM32CubeMX基于Java开发,需…...

CC工具箱使用指南:【查找面要素的狭窄部位】

一、简介 之前做过一个查找狭窄面的工具,只是针对整体面的一个判断。 但是如果一个面只是一个角存在狭窄的区域,就很难判断: 这种情况下,要这个狭窄区域找出来是很有必要的,于是就做了这个工具。 注意,这…...

3分钟搞定!OpenClaw 龙虾 + Kimi 联网搜索,小白也能上手

哈喽,大家好!我是阿星👋龙虾本身是没有搜索能力的。你可以利用tavily search skills搜索,也可以用openclaw的brave search websearch tool 进行搜索(后者是要钱的,前者可能有点时效问题)。国内新…...

【程序员转型】开发者转型成为 AI 工程师指南,大模型入门到精通,收藏这篇就足够了!

本文为开发者转型 AI 工程师提供了必备技能与职业路径的全面指南。 AI 工程师的需求前所未有地高涨,成为科技领域增长最快的职业之一。该岗位融合了传统软件开发与机器学习能力,对开发者而言既是机遇,也是现有编程技能的自然进化。你可以在此…...

Git误删急救:30秒拯救你的代码

Git误操作急救手册大纲常见误操作场景误删文件或代码未提交的本地修改被删除已提交的文件被误删误提交或提交错误内容提交了敏感信息(如密码、密钥)提交了错误文件或大文件分支操作失误误删分支(本地或远程)强制推送导致历史覆盖撤…...

大模型联网难题破解!数眼智能(DataEyes)全解析,5分钟解锁实时数据能力

ChatGPT、文心一言、Gemini等大模型落地AI项目时,普遍面临“实时信息获取难、网页数据提取杂、合规使用有风险”的困境,而过时信息、杂乱数据往往让AI应用实用性大打折扣。数眼智能(DataEyes)的核心价值,就是为大模型补…...

搞定2026年生鲜促销图,我的经验是别直接套模板

搞定2026年生鲜促销图,我的经验是别直接套模板我是生鲜电商店铺的运营,上周老板让我负责新品豇豆的推广,要求在周三下午之前做一张吸引人的线上促销海报。这是一个急活,但我自己用手机拍的几张豇豆照片,背景杂乱&#…...

语义之战:微软与帕兰提尔(Palantir)为何争夺你的企业本体(Ontology)

跳出数据湖与大模型:为何“意义层”成为智能体 AI 与业务主权的新前线一场无声的圈地运动正在上演。争夺的不是你的云预算,不是算力,而是决定自主 AI 智能体如何理解你数据含义的语义层。谁掌控了这层翻译层,谁就有权把企业决策直…...

TMC2208控制步进电机

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、两相四线步进电机基本介绍&#xff1f…...

vue表格vxe-table实现表头合并,分组表头自定义合并

在开发后台管理系统时,经常会遇到需要展示复杂表格的场景,其中表头合并(多级表头、不规则合并)是一项常见需求。vxe-table 是一款功能强大的 Vue 表格组件,它不仅支持树形分组表头,还提供了自定义列头合并的…...

【AI】----java的 大模型提示词 prompt ,代码输出提示规范

java的 大模型提示词 prompt ,代码规范■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■提示词■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■…...

金仓数据库在MySQL迁移中的技术观察:兼容性、性能与一体化部署实践

金仓数据库在MySQL迁移中的技术观察:兼容性、性能与一体化部署实践 在数字化转型持续深化的当下,企业对数据基础设施的稳定性、可维护性与成本效益提出了更高要求。面对传统商业数据库授权费用持续走高、技术路线受制于人、运维复杂度日益增加等现实挑战…...

使用http请求中 如何使用token添加到http请求头部

核心区别:请求头 vs 内容头这是一个非常关键的区别!让我用HTTP报文的实际样子来解释:完整的HTTP请求报文POST /mes-standard-biz/mesEquipmentStatusRecord/dataUploadForPlc HTTP/1.1 Host: mom.haier-energy.com satoken: eyJhbGciOiJIUzI1…...

南大东大共同见证丨江苏高校科研院所PPT润色·重塑·拔高

在江苏这片科教沃土上,高校与科研院所始终是创新发展的核心力量。从国家自然科学基金到科学技术奖,从重点研发计划到各类人才项目,每一次答辩都是科研成果的集中展示,更是决定项目成败的关键时刻。在这些关键时刻,一份…...

中国1km逐日全天候地表土壤水分数据集|高精度SSM

🔍 数据简介 本数据集为 《中国1千米分辨率逐日全天候地表土壤水分数据集》(V2.0),由宋沛林、张永强、赵天杰等学者研发,并发布于国家青藏高原科学数据中心。 时间覆盖 2003年1月1日 – 2023年12月31日,空…...

HarmonyOS 6实战30:命令行工具链深度解析

还在为HarmonyOS开发环境配置而烦恼?你的构建流程如何实现自动化?为什么命令行工具在CI/CD中如此重要?DevEco Studio背后的工具链到底隐藏着哪些强大功能?哈喽大家好,我是你们的老朋友爱学习的小齐哥哥。前段时间&…...