• Shardingsphere简单使用例子


      之前在运满满用的是美团的zebra,zebra其实一款过于小众的分库分表工具。刚好看到微信上的一篇文章讲shardingsphere的,正好练练手。整个过程花了一个上午,主要是有两个坑。

    一 环境准备

           <dependency>
                    <groupId>org.apache.shardingsphere</groupId>
                    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                    <version>4.0.1</version>
                </dependency>

    二 配置文件

      配置文件可以说是shardingshpere的核心,他不同于zebra需要和自家的lion配合(lion并没有开源)。而是在springboot的yaml配置文件中完成了分库分表的逻辑。

    spring:
    
      redis:
        mode: cluster
        password: Kn0Wl3dge#BasE
        cluster:
          nodes: 172.24.128.52:32556,172.24.128.77:32523,172.24.128.133:32546,172.24.128.136:32546,172.24.128.134:32545,172.24.128.135:32519
    
      data:
        mongodb:
          uri: mongodb://baseUser:123456@172.24.128.186:32068,172.24.128.187:32593,172.24.128.185:30351/base?replicaSet=rs1&readPreference=secondaryPreferred&connectTimeoutMS=300000
    
      shardingsphere:
        datasource:
          # 数据源,这里配置两个,分别是ds1,ds2
          names: ds1
          # ds1的配置信息,product_db1
          ds1:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://127.0.0.1:3306/knowledge?serverTimezone=GMT%2B8&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&rewriteBatchedStatements=true
            username: root
            password: mxzxyz
        # 分片的配置
        sharding:
          # 表的分片策略
          tables:
            ## team_shard是逻辑表的名称
            team_shard:
              # 数据节点配置,采用Groovy表达式,切分之后的真实表所在的节点
              actual-data-nodes: ds$->{1}.team_shard_$->{0..3}
              table‐strategy:
                inline:
                  # 分片键为店铺ID
                  sharding‐column: team_id
                  # 分片策略取模
                  algorithm‐expression: team_shard_$->{team_id%4}
    
        props:
          sql:
            # 日志显示具体的SQL
            show: true

    三 代码部分

      根据配置文件中的 

    tables:
            ## team_shard是逻辑表的名称
            team_shard:

      我们在写mapper.xml的时候,只需要写team_shard作为表名,其他的跟单表真的没有区别

       同时注意分片字段要通过手动设置,比如雪花算法

      

    TeamShardEntity teamShardEntity = TeamShardEntity.builder().teamName(req.getTeamName())
                                .teamAvatar(req.getTeamAvatarUrl())
                                .description(req.getTeamDesc()).build();
                teamShardEntity.setTeamId(System.currentTimeMillis());
                teamService.addTeamShard(teamShardEntity);

    四 踩坑

      1 druid数据源

      如果使用了shardingsphere,就不能使用 

            <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid-spring-boot-starter</artifactId>
                    <version>${druid.version}</version>
                </dependency>

      而是需要直接引用druid,原因还不清楚

         <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.22</version>
            </dependency>

      2 原配置文件中有mongo的配置文件

      配在了shardingsphere的下面,结果启动就是报错,然后我把这部分放在了shardingsphere前,就好了真是神奇

    spring:
    
      redis:
        mode: cluster
        password: Kn0Wl3dge#BasE
        cluster:
          nodes: 172.24.128.52:32556,172.24.128.77:32523,172.24.128.133:32546,172.24.128.136:32546,172.24.128.134:32545,172.24.128.135:32519
    
      data:
        mongodb:
          uri: mongodb://baseUser:123456@172.24.128.186:32068,172.24.128.187:32593,172.24.128.185:30351/base?replicaSet=rs1&readPreference=secondaryPreferred&connectTimeoutMS=300000
    
      shardingsphere:
        datasource:
          # 数据源,这里配置两个,分别是ds1,ds2
          names: ds1
          # ds1的配置信息,product_db1
          ds1:
  • 相关阅读:
    十三、Sklearn核密度估计
    十二、Sklearn高斯混合模型
    十一、Sklearn K-means聚类
    十、Sklearn流形学习
    九、Sklearn主成分分析
    八、Sklearn决策树与随机森林
    七、Sklearn支持向量机
    六、Sklearn线性回归
    五、Sklearn朴素贝叶斯分类
    $.each()和$().each()
  • 原文地址:https://www.cnblogs.com/juniorMa/p/16262594.html
Copyright © 2020-2023  润新知