• Spring-boot2X基于sharding-jdbc3.x分表分库


    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。

    ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。

    Sharding-JDBC

    定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

    • 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
    • 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
    • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

    在数据量不是很多的情况下,可以将数据库进行读写分离,以应对高并发的需求,通过水平扩展从库,来缓解查询的压力

    在数据量达到500万的时候,可以将数据进行分表存储

    在数据量继续扩大,可以考虑分库分表,将数据存储在不同数据库的不同表中

    Sharding-JDBC分片策略存有两种维度:

    • 数据源分片策略(DatabaseShardingStrategy):数据被分配的目标数据源
    • 表分片策略(TableShardingStrategy):数据被分配的目标表

    1.应用

    spring boot 版本:2.1.8.RELEASE

    没使用最新的4.x,采用的3.x

    (1)添加依赖

    <dependency>
           <groupId>javax.persistence</groupId>
           <artifactId>persistence-api</artifactId>
           <version>1.0.2</version>
    </dependency>
    
    <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
    </dependency>
    
    <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.0.0</version>
    </dependency>
    
    <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid-spring-boot-starter</artifactId>
           <version>1.1.20</version>
    </dependency>
    
    <dependency>
           <groupId>io.shardingsphere</groupId>
           <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
           <version>3.1.0</version>
    </dependency>
    
    <dependency>
          <groupId>io.shardingsphere</groupId>
          <artifactId>sharding-jdbc-spring-namespace</artifactId>
          <version>3.1.0</version>
    </dependency>
    <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
    </dependency>

    (2)增加配置

    ##数据库配置
    sharding.jdbc.datasource.names=ds0,ds1
    
    sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
    sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
    sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/db0?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
    sharding.jdbc.datasource.ds0.username=root
    sharding.jdbc.datasource.ds0.password=root
    
    sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
    sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
    sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/db1?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
    sharding.jdbc.datasource.ds1.username=root
    sharding.jdbc.datasource.ds1.password=root
    
    sharding.jdbc.config.sharding.default-data-source-name=ds0
    sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=file_id
    sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{file_id % 2}
    
    sharding.jdbc.config.sharding.tables.assets.actual-data-nodes=ds$->{0..1}.assets$->{0..5}
    sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.sharding-column=id
    sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.algorithm-expression=assets$->{id % 6}
    sharding.jdbc.config.sharding.tables.assets.key-generator-column-name=id
    
    sharding.jdbc.config.sharding.tables.structures.key-generator-column-name=id
    
    sharding.jdbc.config.sharding.binding-tables=files
    sharding.jdbc.config.sharding.props.sql.show=true

    说明:

    sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column 配置的分库的字段

    sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression 配置的分库的逻辑,根据file_id%2进行分

    sharding.jdbc.config.sharding.tables.assets.actual-data-nodes  配置的是user表在真实数据库中的位置

    sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.sharding-column 配置assets表数据切分的字段

    sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.algorithm-expression=assets$->{id % 6}  配置assets表数据切分的策略

      files表不分库

      structures表只分库部分表

    更多可以查看文档 https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/usage/sharding/

    2.扩容

      采用双倍扩容的方案 

      从2台服务器扩到4台,接着再扩到8台……

  • 相关阅读:
    手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
    键盘侠Linux教程 | Linux运维工程师
    键盘侠Linux干货| ELK(Elasticsearch + Logstash + Kibana) 搭建教程
    键盘侠Linux教程(六)| 正则表达式与通配符
    键盘侠Linux干货| 使用SSH方式推送文件至github仓库
    键盘侠Linux干货| 使用Nginx创建一个私人网盘
    键盘侠Linux教程(五)| 基本权限管理
    键盘侠Linux教程(四)| 常用命令
    键盘侠Linux教程(一)|初学者建议
    键盘侠Linux教程(三)| Linux安装
  • 原文地址:https://www.cnblogs.com/baby123/p/11607958.html
Copyright © 2020-2023  润新知