做网站运营需要培训吗,wordpress 歌曲列表,西安做网站找缑阳建,深圳网站建设 百业Spring Boot 作为主流微服务框架#xff0c;拥有成熟的社区生态。市场应用广泛#xff0c;为了方便大家#xff0c;整理了一个基于spring boot的常用中间件快速集成入门系列手册#xff0c;涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件#xf… Spring Boot 作为主流微服务框架拥有成熟的社区生态。市场应用广泛为了方便大家整理了一个基于spring boot的常用中间件快速集成入门系列手册涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件大概有几十篇文章陆续会开放出来感兴趣同学请提前关注收藏互联网高速发展同时也带来的海量数据存储问题。传统关系型数据库的单库单表已经很难支撑如何高效存储和访问这些数据成为业内急需解决的问题。解决思路有两个方向NoSQL数据库非关系型数据库天然集成了类似分布式分片的功能支持海量数据存储但是不具备事务管理分库分表对多个单库单表资源整合并配备资源调度模块从而形成一个具有海量数据储存的逻辑表。今天我们主要介绍如何基于Springboot快速集成分库分表框架尽量做到开箱即用当然除了ShardingSphere之外还有其他分库分表框架如CobarMyCat等ShardingSphere介绍ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈它由 3 款相互独立却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能ShardingSphere 由三个子项目组成形成一个完整的数据库解决方案。1、ShardingSphere-JDBC定位为轻量级 Java 框架在 Java 的 JDBC 层提供额外服务。它使用客户端直连数据库以 jar 包形式提供服务无需额外部署和依赖可理解为增强版的 JDBC 驱动完全兼容 JDBC 和各种 ORM 框架。适用于任何基于Java的ORM框架如JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。基于任何第三方的数据库连接池如DBCP, C3P0, BoneCP, Druid, HikariCP等。支持任意实现JDBC规范的数据库。目前支持MySQLOracleSQLServer和PostgreSQL。2、ShardingSphere-Proxy定位为透明化的数据库代理端提供封装了数据库二进制协议的服务端版本用于完成对异构语言的支持。目前提供 MySQL/PostgreSQL 版本它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端操作数据对 DBA 更加友好。3、ShardingSphere-Sidecar规划中定位为 Kubernetes 的云原生数据库代理以 Sidecar 的形式代理所有对数据库的访问。通过无中心、零侵入的方案提供与数据库交互的的啮合层即 Database Mesh又可称数据网格。优势解决方案完备性它集客户端分片、代理服务器以及分布式数据库的核心功能于一身。开发友好性提供了友好的集成方式业务开发人员只需要引入一个 JAR 包就能在业务代码中嵌入数据分片、读写分离、分布式事务、数据库治理等一系列功能。可插拔的系统扩展性它的很多核心功能均通过插件的形式提供供开发者排列组合来定制属于自己的独特系统。项目示例首先新建一个工程spring-boot-bulking-sharding-sphere在pom.xml 文件中添加分库分表的 starter 依赖包dependencygroupIdorg.apache.shardingsphere/groupIdartifactIdsharding-jdbc-spring-boot-starter/artifactIdversion4.0.0-RC1/version
/dependency数据环境准备分别创建两个数据库ds0、ds1在ds0数据库中创建 user_0、user_2两张用户表CREATE TABLE user_0 (id bigint(20) NOT NULL AUTO_INCREMENT,user_name varchar(128) NOT NULL DEFAULT COMMENT 用户名,age int(11) NOT NULL COMMENT 年龄,address varchar(128) COMMENT 地址,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表;CREATE TABLE user_2 (id bigint(20) NOT NULL AUTO_INCREMENT,user_name varchar(128) NOT NULL DEFAULT COMMENT 用户名,age int(11) NOT NULL COMMENT 年龄,address varchar(128) COMMENT 地址,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表;在ds1数据库中创建 user_1、user_3两张用户表CREATE TABLE user_1 (id bigint(20) NOT NULL AUTO_INCREMENT,user_name varchar(128) NOT NULL DEFAULT COMMENT 用户名,age int(11) NOT NULL COMMENT 年龄,address varchar(128) COMMENT 地址,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表;CREATE TABLE user_3 (id bigint(20) NOT NULL AUTO_INCREMENT,user_name varchar(128) NOT NULL DEFAULT COMMENT 用户名,age int(11) NOT NULL COMMENT 年龄,address varchar(128) COMMENT 地址,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表;我们采用Mybatis作为ORM框架遵循Mybatis的开发流程首先需要定义业务实体类UserMapper接口类文件以及对应的sql语句的xml文件。Mapper
public interface UserMapper {Long addUser(User user);ListUser queryAllUser();User queryUserById(Long id);PageUser querUserByPage();
}Spring boot 框架最为闪亮的设计就是约定胜于配置废弃了之前繁琐的xml形式定义Bean实例将一系列框架的配置项迁移到 application.properties 中借助 EnableAutoConfiguration自动完成装载并实例化相应的Bean实例到 spring 容器中IOC统一管理。针对两个数据库初始化两个DataSource对象这两个 DataSource 对象将组成一个 Map 并传递给ShardingDataSourceFactory 工厂类application.properties 配置文件server.port8090
application.namespring-boot-bulking-sharding-sphere
mybatis.config-locationclasspath:config/mybatis-config.xml
spring.shardingsphere.datasource.namesds0,ds1# 数据源
spring.shardingsphere.datasource.ds0.typecom.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-namecom.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.urljdbc:mysql://localhost:3306/ds0?characterEncodingutf-8
spring.shardingsphere.datasource.ds0.usernameroot
spring.shardingsphere.datasource.ds0.password111111
spring.shardingsphere.datasource.ds1.typecom.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-namecom.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds1.urljdbc:mysql://localhost:3306/ds1?characterEncodingutf-8
spring.shardingsphere.datasource.ds1.usernameroot
spring.shardingsphere.datasource.ds1.password111111搞定数据源后接下来我们需要设置分库、分表策略。# 不分表application.properties没有为表单独配置默认数据源策略
spring.shardingsphere.sharding.default-data-source-nameds1# user表的分表配置
spring.shardingsphere.sharding.tables.user.actual-data-nodesds0.user_$-{[0,2]},ds1.user_$-{[1,3]}
# user库策略也可以采用默认的
spring.shardingsphere.sharding.tables.user.database-strategy.inline.sharding-columnid
spring.shardingsphere.sharding.tables.user.database-strategy.inline.algorithm-expressionds$-{id % 2}
# user表策略
spring.shardingsphere.sharding.tables.user.table-strategy.inline.sharding-columnid
spring.shardingsphere.sharding.tables.user.table-strategy.inline.algorithm-expressionuser_$-{id % 4}
#spring.shardingsphere.sharding.tables.user.key-generator.columnid
#spring.shardingsphere.sharding.tables.user.key-generator.typeSNOWFLAKE在 ShardingSphere 中存在一组 ShardingStrategyConfiguration这里使用的是基于行表达式的 InlineShardingStrategyConfiguration。InlineShardingStrategyConfiguration包含两个参数一个是指定分片列名称的 shardingColumn另一个是指定分片算法行表达式的 algorithmExpression。上面的示例将基于 id 列对 2 的取模值来确定数据应该存储在哪一个数据库中我们对user表做了分库分表拆分成4个表并分别归属到两个库中。分表键是id字段。通过单元测试插入 10条用户记录验收下数据的插入情况~Test
public void addUser() {for (long i 1; i 11; i) {User user User.builder().id(i).userName(TomGE).age(29).address(杭州).build();userMapper.addUser(user);System.out.println(插入用户成功uid user.getId());}}其中id4id8 两条记录插入到ds0库的user_0表中。项目源码https://github.com/aalansehaiyang/spring-boot-bulking 模块spring-boot-bulking-sharding-sphere热衷于收集高并发、系统架构、微服务、消息中间件、 RPC框架、高性能缓存、搜索、分布式数据框架、分布式协同服务、分布式配置中心、中台架构、领域驱动设计、系统监控、系统稳定性等技术知识。