使用Apache ShardingSphere简答实现水平分表

news/2024/11/28 5:48:36/

1 简介

Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。

官方网站

https://shardingsphere.apache.org/document/current/cn/overview/

2 创建数据库和表

# 创建数据库
CREATE DATABASE mytest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;# 创建表
CREATE TABLE article_1 (id BIGINT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(50) NOT NULL,summary VARCHAR(300) NOT NULL,keywords VARCHAR(100) NOT NULL,create_time timestamp not null default CURRENT_TIMESTAMP COMMENT '创建时间',update_time timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8;# 创建表
CREATE TABLE article_2 (id BIGINT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(50) NOT NULL,summary VARCHAR(300) NOT NULL,keywords VARCHAR(100) NOT NULL,create_time timestamp not null default CURRENT_TIMESTAMP COMMENT '创建时间',update_time timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8;

3 工程目录

[在这里插入图片描述

4 源代码

注意的问题:

(1) 不要使用druid-spring-boot-starter自动装配,直接使用“druid”即可;

(2)我用的shardingsphere-jdbc-core-spring-boot-starter版本是5.0.0,测试5.1.0和5.2.0一直报错,不知道什么原因

4.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mason</groupId><artifactId>subtable</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency><!-- Operate the mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><!-- 引入druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.15</version></dependency><!-- druid不要使用下面的自动装配 --><!--<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.4</version></dependency>--><!-- shardingsphere --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

4.2 application.yml

注意:配置数据库和表是重点

# 数据库分表spring:application:name: subtableshardingsphere:# 显示sqlprops:sql:show: truedatasource:# 连接多个数据库时,可以设置多个names和datasource# names: db1,db2# 连接单个数据库names: mytestmytest:# 连接数据库url: jdbc:mysql://192.168.108.200:3306/mytest?useUnicode=true&&characterEncoding=utf-8&&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# set druidtype: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 5min-idle: 5max-active: 20max-wait: 6000time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 30000test-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20# 配置规则rules:# 配置分片sharding:# 设置主键生成策略key-generators:# 自定义主键生成算法名称snowflake:type: SNOWFLAKE# 自定义分片算法sharding-algorithms:# 自定义分片算法名称article-strategy-inline:type: INLINEprops:algorithm-expression: article_$->{id % 2 + 1}# 配置表tables:# 自定义的表名article:# 配置数据库和全部的表# 含有article_1, article_2两个表actual-data-nodes: mytest.article_$->{1..2}# 主键生成策略key-generate-strategy:# 对应article表中自定义的字段column: id# 使用上面自定义的主键生成算法key-generator-name: snowflake# 配置分表策略table-strategy:standard:# 对应article表中自定义的字段sharding-column: id# 使用上面自定义的分片算法sharding-algorithm-name: article-strategy-inline# print logs
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 关闭数据库下划线自动转驼峰map-underscore-to-camel-case: false

4.3 Article

package com.mason.subtable.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("article")
public class Article {private Long id;private String title;private String summary;private String keywords;@TableField("create_time")private String create_time;@TableField("update_time")private String update_time;
}

4.4 ArticleMapper

package com.mason.subtable.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mason.subtable.entity.Article;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface ArticleMapper extends BaseMapper<Article> {
}

4.5 DataService

package com.mason.subtable.service;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mason.subtable.entity.Article;
import com.mason.subtable.mapper.ArticleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class DataService {@Autowiredprivate ArticleMapper articleMapper;// 添加数据public int addMultiData(){// 批量添加数据Article article = new Article();article.setTitle("河南大学");article.setKeywords("河南,大学");article.setSummary("河南大学在开封");this.articleMapper.insert(article);article = new Article();article.setTitle("软件学院");article.setKeywords("河南,大学");article.setSummary("河南大学在开封");this.articleMapper.insert(article);article = new Article();article.setTitle("河南大学");article.setKeywords("软件,学院");article.setSummary("河南大学软件学院");this.articleMapper.insert(article);return 1;}// 获取数据public List<Article> getMultiData(){QueryWrapper<Article> wrapper = new QueryWrapper<>();wrapper.eq("title","河南大学");return this.articleMapper.selectList(wrapper);}}

4.6 DataController

package com.mason.subtable.controller;import com.mason.subtable.entity.Article;
import com.mason.subtable.service.DataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/data")
public class DataController {@Autowiredprivate DataService dataService;@GetMapping("/add")public int addData(){return this.dataService.addMultiData();}@GetMapping("/query")public List<Article> queryData(){return this.dataService.getMultiData();}}

4.7 SubtableApplication

package com.mason.subtable;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SubtableApplication {public static void main(String[] args) {SpringApplication.run(SubtableApplication.class, args);}
}

5 结果截图

在浏览器中输入以下地址;

http://127.0.0.1:8080/data/add

数据会被根据算法插入到article_1和article_2其中一个表中。

在这里插入图片描述


http://www.ppmy.cn/news/446754.html

相关文章

黑莓手机企业激活注意事项和可能问题

手机能否打电话 手机网络模式 电信UIM卡&#xff1a;手机要设置为Global或者EVDO 移动SIM卡&#xff1a;手机j建议设置为GSM/2G 联通UIM卡&#xff1a;手机j建议设置为3G 手机能否上网 浏览器访问www.baidu.com 提示&#xff1a;某些黑莓手机做过企业激活了&#xff0c;前一个公…

武汉移动137和武汉电信189手机业务比较

本人长期使用移动1372XXXX834的号码&#xff0c;以下简称137&#xff0c;现在试用了一下电信1897XXXX137&#xff0c;以下简称189。试用一个月后感受良多&#xff0c;恰逢接触过经营分析及BOSS系统&#xff0c;我来比较一下&#xff0c;都是亲身感受。 一、137原是M-ZONE动感地…

如何将计算机接入互联网络,怎么设置网络-计算机:如何通过无线网络接入技术接入Internet网络...

1.无线网络接入技术 GSM、CDMA、GPRS移动通信接入技术 GSM 是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术。该技术是目前个人通信的一种常见技术代表。GSM数字网具有较强的保密性和抗干扰性,音质清晰,通话稳定,并具备容量大,频率资源利用率高,接口开放,功能…

中国电信5G定制网产品要点

来源&#xff1a;中国电信5G定制网产品手册&#xff08;2020年11月&#xff09; 版本说明&#xff1a; 2021年11月4日初稿。网络能力&#xff08;N&#xff09;产品化比较清晰。边缘智能&#xff08;I&#xff09;、云边协同&#xff08;C&#xff09;、应用随选&#xff08;…

玩转天翼3G:手机4种上网方式

中国电信推出互联网手机&#xff0c;开始了手机互联网时代&#xff0c; 用户可以随时随地的畅游互联网。中国电信互联网手机成功实现“CW”上网方式&#xff0c;有以下几种上网方式&#xff1a;1、手机直接上互联网&#xff1b;2、手机号作为宽带帐号&#xff0c;用 笔记本在WL…

天翼空间---常见问题

天翼空间---常见问题 2010年08月07日 [b]应用问题[/b] 1、在天翼空间下载的应用&#xff0c;能否在PC上使用呢&#xff1f; 天翼空间提供手机和PC两种类型的应用&#xff0c;在应用描述-规格处有相应提示&#xff0c;手机应用不能在PC上使用 2、应用下载后&#xff0c;若换UIM…

Android 获取SIM卡手机号

相信APP在开发中经常用到SIM卡手机号&#xff0c;经过一些测试分析&#xff0c;提供一下个人的理解分析。手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号&#xff0c;供网络与设备识别那就是I…

中国电信天翼U盾产品荣获第三届网络安全国家标准优秀应用案例二等奖

2017年7月18日&#xff0c;由中国电子技术标准化研究院、苏州市质量技术监督局、中国电子工业标准化技术协会在苏州联合主办的“2017中国新一代信息技术产业标准化论坛”落下了帷幕。中国电信股份有限公司增值业务运营中心携手国家信息中心联合申报的《依托网络国家标准&#x…