apache/sharding-proxy5.0 分库分表 教程 详解

apache/sharding-proxy 分库分表

官方架构图

https://shardingsphere.apache.org/document/current/en/overview/ (官方文档)

sharding主要有三种接入方式

  1. Sharding-JDBC:通过程序代码实现Sharding的介入,只是多种数据库。但是使用微服务需要多服务配置。
  2. Sharding-proxy:通过官方提供的程序,相当于中间件实现。当做Mysql/PostgreSQL下载或通过docker在本地启动。
  3. Sharding-Sidecar:更注重于服务网格化。
1.apache/sharding-proxy
  1. 去官方文档选择需要下载的文件
    在这里插入图片描述

  2. 连接mysql的话需要在lib文件夹中添加mysql连接jar

在这里插入图片描述

链接:https://pan.baidu.com/s/11iuw7N_XyTmuuqmRaJhOFA
提取码:flmd

  1. 修改conf/server.yaml文件
    在这里插入图片描述

    authentication:
      users:
        root:
          password: root
        sharding:
          password: sharding 
          authorizedSchemas: sharding_db
    
    props:
      max-connections-size-per-query: 1
      acceptor-size: 16  # The default value is available processors count * 2.
      executor-size: 16  # Infinite by default.
      proxy-frontend-flush-threshold: 128  # The default value is 128.
        # LOCAL: Proxy will run with LOCAL transaction.
        # XA: Proxy will run with XA transaction.
        # BASE: Proxy will run with B.A.S.E transaction.
      proxy-transaction-type: LOCAL
      proxy-opentracing-enabled: false
      proxy-hint-enabled: false
      query-with-cipher-column: true
      sql-show: false
      check-table-metadata-enabled: false
    
  2. 修改conf/config-sharding.yaml文件

在这里插入图片描述

#sharding数据库名
schemaName: sharding_db

#需要分库分表的数据库信息
dataSourceCommon:
  username: root
  password: root
  connectionTimeoutMilliseconds: 30000
  idleTimeoutMilliseconds: 60000
  maxLifetimeMilliseconds: 1800000
  maxPoolSize: 50
  minPoolSize: 1
  maintenanceIntervalMilliseconds: 30000

#需要分库分表的连接方式(需要创建好两个库,表不用创建)
dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
  ds_1:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false

#分库分表规则
rules:
- !SHARDING
#数据库表
  tables:
  #表名
    t_order:
            #数据节点 :数据库名.表名
      actualDataNodes: ds_${0..1}.t_order_${0..1}
      #分表策略
      tableStrategy:
      #策略
        standard:
        #列名
          shardingColumn: order_id
          #分表算法名称(在下边有定义)
          shardingAlgorithmName: t_order_inline
          #主键生成策略
      keyGenerateStrategy:
      #列名
        column: order_id
        #生成算法名称(雪花算法)
        keyGeneratorName: snowflake
        #绑定表
  bindingTables:
    - t_order
    #分库策略
  defaultDatabaseStrategy:
  #标准
    standard:
    #列名
      shardingColumn: user_id
       #分库算法名称(在下边有定义)
      shardingAlgorithmName: database_inline
  defaultTableStrategy:
    none:
#算法定义
  shardingAlgorithms:
  #算法名称
    database_inline:
    #类型
      type: INLINE
      props:
      #分库算法表达(ds_${拿user_id取余2就可得到0101})随之进入该库
        algorithm-expression: ds_${user_id % 2}
    t_order_inline:
      type: INLINE
      props:
       #分表算法表达(t_order_${拿order_id取余2就可得到0101})随之进入该表
        algorithm-expression: t_order_${order_id % 2}
#主键生成器
  keyGenerators:
    snowflake:
      type: SNOWFLAKE
      props:
        worker-id: 123

  1. 启动Sharding-proxy

在这里插入图片描述

在这里插入图片描述

  1. 通过nacvat连接(版本有可能导致连接不上)
    在这里插入图片描述

  2. 根据文件的表名定义进行表创建定义

    • CREATE TABLE if not EXISTS  t_order (order_id BIGINT NOT NULL,user_id INT NOT NULL,status VARCHAR(50),PRIMARY KEY (order_id))
      
    • 创建语句执行后代理库中会多出一张表
      在这里插入图片描述

    • 随之在配置文件配置好的两个库中就会生成表
      在这里插入图片描述

    • 使用insert语句进行测试

      使用user_id为奇数的值进行测试
      INSERT INTO t_order( `user_id`, `status`) VALUES ( 1, '1');
      

      ​ 由于在配置文件设置了主键为雪花算法生成,所以主键会自动生成

      ​ 主键是随机生成的我们无法判断在哪个库,但是分表的策略是根据user_id,而user_id为奇数。所以数据肯定被分到了后缀为奇数的表中。

    在这里插入图片描述

    生成的主键ID为奇数,所以分库的应该也是奇数库

    使用user_id为偶数的值进行测试
    INSERT INTO t_order( `user_id`, `status`) VALUES ( 2, '1');
    

在这里插入图片描述

成功!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值