sharding-proxy读写分离实战

根据上一节的而配置,我们在sharding-proxy代理数据库中新建一张表

CREATE TABLE `t_order_0` (

  `order_id` bigint(11) NOT NULL,

  `user_id` int(11) DEFAULT NULL,

  `status` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`order_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

新建好,我们可以发现在真实数据库中自动建立了2张表,t_order_0,t_order_1,是sharing-proxy自动帮我们建立的表

往代理数据库中添加数据: INSERT INTO `t_order` VALUES ('1', '1', '1');

根据配置:发现数据入库在物理数据库t_order_1中

在往代理数据库中插入数据: INSERT INTO `t_order` VALUES ('2', '2', '2');  发现数据入库在物理数据库t_order_0中

可以发现物理数据库新增2条

就这样分表结束了。通过代码编写只需要连接sharding-proxy

分表的配置如下:

schemaName: sharding_db

dataSources:

  ds_0:

    url: jdbc:mysql://129.2.176.195:3306/sharding_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

    username: root

    password: root123

    connectionTimeoutMilliseconds: 30000

    idleTimeoutMilliseconds: 60000

    maxLifetimeMilliseconds: 1800000

    maxPoolSize: 50

shardingRule:

  tables:

    t_order:

      actualDataNodes: ds_${0}.t_order_${0..1}

      tableStrategy:

        inline:

          shardingColumn: order_id

          algorithmExpression: t_order_${order_id % 2}

      keyGenerator:

        type: SNOWFLAKE

        column: order_id

  bindingTables:

    - t_order

  defaultDatabaseStrategy:

    inline:

      shardingColumn: user_id

      algorithmExpression: ds_${0}

  defaultTableStrategy:

    none:

===============分库分表=====================

配置如下:

schemaName: sharding_db

dataSources:

  ds_0:

    url: jdbc:mysql://128.1.76.95:3306/sharding_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

    username: root

    password: root123

    connectionTimeoutMilliseconds: 30000

    idleTimeoutMilliseconds: 60000

    maxLifetimeMilliseconds: 1800000

    maxPoolSize: 50

  ds_1:

    url: jdbc:mysql://128.1.76.94:3306/sharding_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

    username: root

    password: root123

    connectionTimeoutMilliseconds: 30000

    idleTimeoutMilliseconds: 60000

    maxLifetimeMilliseconds: 1800000

    maxPoolSize: 50

shardingRule:

  tables:

    t_order:

      actualDataNodes: ds_${0..1}.t_order_${0..1}

      tableStrategy:

        inline:

          shardingColumn: order_id

          algorithmExpression: t_order_${order_id % 2}

      keyGenerator:

        type: SNOWFLAKE

        column: order_id

  bindingTables:

    - t_order

  defaultDatabaseStrategy:

    inline:

      shardingColumn: user_id

      algorithmExpression: ds_${user_id % 2}

  defaultTableStrategy:

none:

可以发现,操作sharding-proxy,数据分别入库在不同的数据库中和表中

===========读写分离========================

配置如下:

schemaNamemaster_slave_db

dataSources:
  master_ds:
    urljdbc:mysql://192.3.76.194:3306/demo_ds_master?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
    usernameroot
    passwordroot123
    connectionTimeoutMilliseconds30000
    idleTimeoutMilliseconds60000
    maxLifetimeMilliseconds1800000
    maxPoolSize50
  slave_ds_0:
    urljdbc:mysql://192.3.76.195:3306/demo_ds_slave_0?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
    usernameroot
    passwordroot123
    connectionTimeoutMilliseconds30000
    idleTimeoutMilliseconds60000
    maxLifetimeMilliseconds1800000
    maxPoolSize50
  slave_ds_1:
    urljdbc:mysql://128.1.76.95:3306/demo_ds_slave_1?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
    usernameroot
    passwordroot123
    connectionTimeoutMilliseconds30000
    idleTimeoutMilliseconds60000
    maxLifetimeMilliseconds1800000
    maxPoolSize50

masterSlaveRule:
  namems_ds
  masterDataSourceNamemaster_ds
  slaveDataSourceNames:
    slave_ds_0
    slave_ds_1

分别在主库创建数据库,在从库建立2个数据库,然后重启服务

重启服务我们会发现:在代理服务器自动创建了master_slave_db数据库

读写分离操作:往代理服务器新建一张表,发现主数据库也创建了表,而从服务器没有创建表,这时候我们在从服务器手动创建数据库;第二:往代理服务器新增一条数据,发现主服务器有数据,而从服务器没有数据,第三:往代理服务器读取数据发现没有数据这就证明了读写分离;

总结:在代理服务器向操作sql,写操作在主服务器上执行,读操作在从服务器操作,如果开启了bin-log,进行了主从复制的话,那么读写分离大大减轻了服务器的压力

总结+截图:

我们开启了主从复制:

1,首先在主服务器创建数据库demo_ds_master

================下面我们开启主从复制,也就是从服务的表结构在主服务器创建===========

1.清空表结构和数据

  1. 观察结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值