ShardingJdbc分表

article/2025/10/27 16:28:32

ShardingJdbc分表

  • 前言
  • 一、ShardingJdbc分表
    • 1.引入maven依赖
    • 2.yml配置
    • 2.分表功能测试
  • 总结


前言

在这里插入图片描述

ShardingJdbc官网
下载链接
快速入门

官网原话:

  • Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
  • Apache ShardingSphere 旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。关系型数据库当今依然占有巨大市场份额,是企业核心系统的基石,未来也难于撼动,我们更加注重在原有基础上提供增量,而非颠覆。
  • Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。目前,数据分片、读写分离、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。
  • ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。

一、ShardingJdbc分表

  • 水平拆分:统一个表的数据拆到不同的库不同的表中。可以根据时间、地区、或某个业务键维度,也可以通过hash进行拆分,最后通过路由访问到具体的数据。拆分后的每个表结构保持一致。
  • 垂直拆分:就是把一个有很多字段的表给拆分成多个表,或者是多个库上去。每个库表的结构都不一样,每个库表都包含部分字段。一般来说,可以根据业务维度进行拆分,如订单表可以拆分为订单、订单支持、订单地址、订单商品、订单扩展等表;也可以,根据数据冷热程度拆分,20%的热点字段拆到一个表,80%的冷字段拆到另外一个表。

准备工作

  • 准备一个数据库test-db。
  • 数据库下方创建user0和user1表即可。
  • 数据表规则:年龄为偶数的放入user0库,奇数的放入user1库。

1.引入maven依赖

代码如下(示例):

<properties><java.version>1.8</java.version><sharding-sphere.version>4.0.0-RC1</sharding-sphere.version></properties><dependencies><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--依赖sharding-jdbc--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>${sharding-sphere.version}</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-core-common</artifactId><version>${sharding-sphere.version}</version></dependency><!--依赖数据源druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>

2.yml配置

代码如下(示例):

server:port: 9074
spring:main:allow-bean-definition-overriding: trueshardingsphere:# 参数配置,显示sqlprops:sql:show: true# 配置数据源datasource:names: ds0ds0:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8username: rootpassword: admin123maxPoolSize: 100minPoolSize: 5sharding:default-data-source-name: ds0# 配置分表的规则tables:# user 逻辑表名user:# 数据节点:逻辑表名$->{0..N}actual-data-nodes: ds0.user$->{0..1}# 拆分表策略,也就是什么样子的数据放到哪个数据表中。table-strategy:inline:sharding-column: age    # 分片字段(分片键)algorithm-expression: user$->{age % 2} # 分片算法表达式
#整合mybatis-plus的sql打印日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.分表功能测试

数据库创建user0,user1表

在这里插入图片描述

代码如下(示例):

/*** 分表测试*/@Testpublic void test02(){//循环赋值数据便于测试分表插入功能List<User> list = new ArrayList<>();for (int i = 10; i <= 20; i++) {User user = new User();user.setAge(i);user.setEmail("101834@qq.com");user.setName("张三");list.add(user);}service.saveBatch(list);}

控制台打印输出


JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@74b00247] will be managed by Spring
==>  Preparing: INSERT INTO user ( id, NAME, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 1591659523055005697(Long), 张三(String), 10(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017154(Long), 张三(String), 11(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017155(Long), 张三(String), 12(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017156(Long), 张三(String), 13(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017157(Long), 张三(String), 14(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017158(Long), 张三(String), 15(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017159(Long), 张三(String), 16(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017160(Long), 张三(String), 17(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017161(Long), 张三(String), 18(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017162(Long), 张三(String), 19(Integer), 101834@qq.com(String)
==> Parameters: 1591659524372017163(Long), 张三(String), 20(Integer), 101834@qq.com(String)

数据库表数据展示

在这里插入图片描述
在这里插入图片描述


总结

这里就只讲解了ShardingJdbc分表的功能,如果想要学习分库的话,可以参考如下ShardingJdbc分库分表学习笔记及视频讲解

具体内容讲解出自:b站UP主:遇见狂神说、小飞非-学相伴
ShardingJdbc分库分表学习笔记
ShardingJdbc分库分表视频讲解


http://chatgpt.dhexx.cn/article/AwLGhDd6.shtml

相关文章

Java如何实现分库分表

一、为啥要分库分表 在大型互联网系统中&#xff0c;大部分都会选择mysql作为业务数据存储。一般来说&#xff0c;mysql单表行数超过500万行或者单表容量超过2GB&#xff0c;查询效率就会随着数据量的增长而下降。这个时候&#xff0c;就需要对表进行拆分。 那么应该怎么拆分…

mysql 垂直分表 设计_水平分表和垂直分表

一、数据库瓶颈 不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、…

ShardingSphere分库分表

ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞生&#xff0c;最初就叫ShardingJDBC。2016年的时候&#xff0c;由其中一个主要的开发人员张亮&#xff0c;带入到京东数科&#xff0c;组件团队继续开发。在国内历经了当当网、电信翼支付、京东数科等多…

mysql innodb分表技术_mysql分表技术

一般来说&#xff0c;当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了&#xff0c;这次我来详细说说分表的一些方法。 目前我所知道的方法都是MYISAM的&#xff0c;INNODB如何做分表并且保留事务和外键&#xff0c;我还不是很了解。 首先&#xff0c;我们需…

mybatis实现分表

分析上面登陆&#xff0c;当前表按照年份分表了&#xff0c;最大的一张表超过500w建议分表 注意:之前写的经过多方测试发现遍历的时候参数传递不进去&#xff0c;现如今已经完善 package org.jeecg.config.mybatis;import lombok.extern.slf4j.Slf4j; import org.apache.ibati…

mysql 分表条件_mysql分表详解

本人混迹qq群2年多了&#xff0c;经常听到有人说“数据表太大了&#xff0c;需要分表”&#xff0c;“xxxx了&#xff0c;要分表”的言论&#xff0c;那么&#xff0c;到底为什么要分表&#xff1f; 难道数据量大就要分表&#xff1f; mysql数据量对索引的影响 本人mysql版本为…

ShardingSphere简介与分表使用

一、ShardingSphere简介 1、简介 ShardingSphere 已于 2020 年 4 月 16 日成为 Apache 软件基金会的顶级项目。 ShardingSphere 是一套开源的分布式数据库中间件解决方案。 ShardingSphere 产品定位为 Database Plus&#xff0c;旨在构建异构数据库上层的标准和生态圈。 它…

mysql mybatis分表查询_mybatis 自动分表

参考: 相关源码已上传至我的 github 欢迎转载,转载请注明出处,尊重作者劳动成果:https://www.cnblogs.com/li-mzx/p/9963312.html 前言 小弟才疏学浅,可能很多问题也没有考虑到,权当抛砖引玉,希望各位大神指点 项目背景: 希望做一个功能,能在sql操作数据库时,根据某个…

mysql 分区分表_mysql分库分区分表

一、分表 分表分为水平分表和垂直分表。 水平分表原理&#xff1a; 分表策略通常是用户ID取模&#xff0c;如果不是整数&#xff0c;可以首先将其进行hash获取到整。 水平分表遇到的问题&#xff1a; 1. 跨表直接连接查询无法进行 2. 我们需要统计数据的时候 3. 如果数据…

Mock平台介绍

Mock平台可以用来模拟接口&#xff0c;具备了get方法&#xff0c;post方法&#xff0c;header&#xff0c;cookie&#xff0c;重定向等功能。 Mock平台的搭建应用于mock框架&#xff0c;在github上可以下载到开源的代码。 下载地址&#xff1a;http://repo1.maven.org/maven2/…

Mock 框架 Moq 的使用

Intro# Moq 是 .NET 中一个很流vb.net教程行的 Mock 框架&#xff0c;使c#教程用 Mock 框架我python基础教程们可以只针对我java基础教程们关注的代码进行测试&#xff0c;对于sql教程依赖项使用 Mock 对象配置预期的依赖服务的行为。 Moq 是基于 Castle 的动态代理来实现的&…

mockjs入门

mockjs 1,mock.js是什么&#xff1f; mockjs是生成随机数据的一款前端工具&#xff0c;用来模拟 Ajax 请求&#xff0c;生成并返回模拟数据 2&#xff0c;为什么用mockjs&#xff1f; 当程序员做项目开发时&#xff0c;前端工程师要请求后端做好的数据时&#xff0c;有可能…

monkey简介

https://blog.csdn.net/lebang08/article/details/70858532 https://www.cnblogs.com/aland-1415/p/6949964.html https://blog.csdn.net/aisemi/article/details/55254348 一、Monkey 简介 monkey是Android SDK中自带的一个命令行工具&#xff0c;使用Java语言写成&#xf…

mokey的介绍和使用

一、monkey介绍 monkey是Android SDK提供的一个命令行工具&#xff0c;可以简单方便的发送伪随机的用户时间流&#xff0c;对Android APP做压力&#xff08;稳定性、健壮性&#xff09;测试。主要是为了测试APP是否存在无响应和崩溃的情况。 二、monkey的使用 1、前提条件&a…

APP测试— 测试工具mokey

文章目录 1 Mokey概念2 运行Monkey&#xff08;对手机进行300次无规律点击&#xff09;3 Mokey常规参数4 Monkey 事件类参数5 Monkey 约束类参数 1 Mokey概念 1&#xff09;Monkey是Android SDK提供的一个命令行工具&#xff0c;可以简单、方便的运行任何版本的Android模拟器和…

Kafka配置用户名密码访问

1 软件版本 kafka_2.12-2.4.0.tgz&#xff08;带zookeeper&#xff09; 2 kafka服务端部署 2.1 将安装包上传到服务器&#xff0c;并解压 tar zxvf kafka_2.12-2.4.0.tgz -C /datamv kafka_2.12-2.4.0 kafka2.2 修改kafka配置文件 server.properties vim /data/kafka/conf…

linux 用户名和密码的处理

1. 创建新用户和密码 # 创建用户 testuser useradd testuser# 给已创建的用户testuser设置密码 passwd testuser# 新创建的用户会在 /home 下创建一个用户目录testuser# 修改用户这个命令的相关参数 usermod --help# 删除用户testuser userdel testuser# 删除用户所在目录rm -…

用户名,密码登录

1.导入项目需要的依赖&#xff0c;分层 注意&#xff1a;如果你的数据库是5.5的版本&#xff0c;依赖要用低版本的&#xff0c;高版本不稳定&#xff0c;新增的内容不识别&#xff0c;会报各种各样奇葩的错误 2.创建实体类 它的属性要和数据库字段对应 package com.oa.entity…

实现用户输入用户名和密码登录

题目 实现用户输入用户名和密码登录&#xff0c;当用户名为admin或administrator且密码为666666时&#xff0c;显示“登录成功”&#xff0c;否则显示“登录失败”&#xff0c;登录失败时允许重复输入三次。 实例 参考程序 User1 "admin" User2 "administr…

计算机用户名和初始密码,电脑默认的用户名和密码是多少

优质回答 回答者&#xff1a;止树2018 电脑用户默认是没有密码的&#xff0c;除非你设置了&#xff0c;没有设置的前提下&#xff0c;直接按回车键就可以进系统了。 电脑默认的用户是administrator&#xff0c;如果你创建了自己的新用户名&#xff0c;那么&#xff0c;原始管理…