ShardingSphere5.0.0-beta的proxy分库分表demo

ShardingSphere-5.0.0.beta-proxy分库分表demo

示例在linux环境

安装proxy

下载proxy安装包和mysql驱动包

  • proxy: wget https://mirrors.bfsu.edu.cn/apache/shardingsphere/5.0.0-beta/apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz

  • mysql驱动: wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.31/mysql-connector-java-5.1.31.jar

解压和驱动包放置

tar -zxvf apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz

如下目录结果:
在这里插入图片描述

mysql驱动移动到lib目录下,如果使用postgresql数据库,那就把相应postgresql驱动放在lib目录下

cp mysql-connector-java-5.1.31.jar  apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin/lib

修改conf下配置

conf/server.yaml

文件最后一行追加以下内容,这里配置root和sharding用户,密码都是123456

rules:
  - !AUTHORITY
    users:
      - root@%:123456
      - sharding@:123456
    provider:
      type: NATIVE

conf/config-sharding.yaml 分库分表

最后一行追加以下内容

#对外暴露的数据库名称
schemaName: t_order

dataSources:
  ds_0:
    url: jdbc:mysql://8.142.97.56:3306/demo_write_ds?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000
  ds_1:
    url: jdbc:mysql://8.142.97.56:3306/demo_read_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000

rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds_${0..1}.t_order_${0..3}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_inline
      keyGenerateStrategy:
        column: order_id
        keyGeneratorName: snowflake
  defaultDatabaseStrategy:
    standard:
      shardingColumn: user_id
      shardingAlgorithmName: database_inline
  defaultTableStrategy:
    none:

  shardingAlgorithms:
    database_inline:
      type: INLINE
      props:
        algorithm-expression: ds_${user_id % 2}
    t_order_inline:
      type: INLINE
      props:
        algorithm-expression: t_order_${order_id % 4}
  • 两个库、每个库四个表,使用user_id分库,order_id分表,字段类型尽量使Integer、Long,谨慎使用String类型
  • ShardingSphere5.0.0-beta配置相对4.X有些变化:shardingRule改rules
  • sql脚本如下
CREATE TABLE `t_order_0` (
  `order_id` bigint(32) NOT NULL COMMENT '订单id',
  `item` varchar(32) DEFAULT NULL COMMENT '商品名称',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表1';

CREATE TABLE `t_order_1` (
  `order_id` bigint(32) NOT NULL COMMENT '订单id',
  `item` varchar(32) DEFAULT NULL COMMENT '商品名称',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表2';

CREATE TABLE `t_order_2` (
  `order_id` bigint(32) NOT NULL COMMENT '订单id',
  `item` varchar(32) DEFAULT NULL COMMENT '商品名称',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表1';

CREATE TABLE `t_order_3` (
  `order_id` bigint(32) NOT NULL COMMENT '订单id',
  `item` varchar(32) DEFAULT NULL COMMENT '商品名称',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表2';

实际效果

通过navicat远程链接
在这里插入图片描述

总结

  • Sharding-Proxy的定位是透明化的数据库代理,它封装了数据库二进制协议,用于完成对异构语言的支持。目前兼容MySQL和POSTGRESQL,可以使用任何兼容MySQL或PG协议的客户端进行访问
  • ShardingSphere-jdbc是直接对原生jdbc的改写
  • ShardingSphere-proxy代理后,屏蔽了底层的分库分表信息,就等同于使用一个mysql数据库一样方便,如果Java开发:生产中大部分都是使用ShardingSphere-jdbc;

ShardingSphere-jdbc优点:jdbc版是jar提供服务,轻量、小而美,没有其他运维工作, 相对没有proxy这层网络开销、性能高,一般在运维工作中使用proxy,方便查询数据,而不要各种跨库跨表操作,缺点:目前jdbc仅支持Java语言开发, 其他语言开发需要使用proxy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值