如何通过 ShardingSphere-Proxy 落地分表分库?

如何通过 ShardingSphere-Proxy 落地分表分库?参考:Sharding-Proxy的基本功能使用 1. 环境准备 MySql 5.7 apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz jdk

如何通过 ShardingSphere-Proxy 落地分表分库?

参考:Sharding-Proxy的基本功能使用

1. 环境准备

2. 数据库脚本准备

# 创建商品数据库
CREATE DATABASE IF NOT EXISTS `products` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
# 创建商品代理数据库
CREATE DATABASE IF NOT EXISTS `products-proxy` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

# 创建商品秒杀表
CREATE TABLE IF NOT EXISTS `seckills` (
	`Id` INT(11) NOT NULL AUTO_INCREMENT,
	`SeckillType` INT(11) NOT NULL,
	`SeckillName` TEXT NULL,
	`SeckillUrl` TEXT NULL,
	`SeckillPrice` DECIMAL(18, 2) NOT NULL,
	`SeckillStock` INT(11) NOT NULL,
	`SeckillPercent` TEXT NULL,
	`TimeId` INT(11) NOT NULL,
	`ProductId` INT(11) NOT NULL,
	`SeckillLimit` INT(11) NOT NULL,
	`SeckillDescription` TEXT NULL,
	`SeckillIstop` INT(11) NOT NULL,
	`SeckillStatus` INT(11) NOT NULL,
PRIMARY KEY (`Id`),
INDEX `ProductId` (`ProductId`)
) COLLATE = "utf8mb4_general_ci" ENGINE = INNODB AUTO_INCREMENT = 2;

# 插入秒杀商品数据
INSERT INTO `seckills`(`Id`, `SeckillType`, `SeckillName`, `SeckillUrl`, `SeckillPrice`, `SeckillStock`, `SeckillPercent`, `TimeId`, `ProductId`, `SeckillLimit`, `SeckillDescription`, `SeckillIstop`, `SeckillStatus`) VALUES (1, 1, "22", "https://img2020.cnblogs.com/blog/1191201/202007/1191201-20200720143227139-1714696954.png", 12.00, 2222, "1", 3, 1, 1, "iphone6是最好的", 1, 1);

INSERT INTO `seckills`(`Id`, `SeckillType`, `SeckillName`, `SeckillUrl`, `SeckillPrice`, `SeckillStock`, `SeckillPercent`, `TimeId`, `ProductId`, `SeckillLimit`, `SeckillDescription`, `SeckillIstop`, `SeckillStatus`) VALUES (2, 1, "22", "https://img2020.cnblogs.com/blog/1191201/202007/1191201-20200720143227139-1714696954.png", 12.00, 2222, "1", 3, 2, 1, "iphone6是最好的", 1, 1);

INSERT INTO `seckills`(`Id`, `SeckillType`, `SeckillName`, `SeckillUrl`, `SeckillPrice`, `SeckillStock`, `SeckillPercent`, `TimeId`, `ProductId`, `SeckillLimit`, `SeckillDescription`, `SeckillIstop`, `SeckillStatus`) VALUES (3, 1, "22", "https://img2020.cnblogs.com/blog/1191201/202007/1191201-20200720143227139-1714696954.png", 12.00, 2222, "1", 3, 3, 1, "iphone6是最好的", 1, 1);

INSERT INTO `seckills`(`Id`, `SeckillType`, `SeckillName`, `SeckillUrl`, `SeckillPrice`, `SeckillStock`, `SeckillPercent`, `TimeId`, `ProductId`, `SeckillLimit`, `SeckillDescription`, `SeckillIstop`, `SeckillStatus`) VALUES (4, 1, "22", "https://img2020.cnblogs.com/blog/1191201/202007/1191201-20200720143227139-1714696954.png", 12.00, 2222, "1", 3, 4, 1, "iphone6是最好的", 1, 1);

3. 配置 ShardingSphere-Proxy

  • 解压 ShardingSphere 到 apache-shardingsphere-4.1.1-sharding-proxy-bin 文件夹

    • 有些 jar 包名称过长导致解压失败,运行时会缺包报错,如:

      Starting the Sharding-Proxy ...
      Exception in thread "main" Cannot create property=orchestration for JavaBean=org.apache.shardingsphere.shardingproxy.config.yaml.YamlProxyServerConfiguration@1517365b
       in "reader", line 24, column 1:
          orchestration:
          ^
      Type org.apache.shardingsphere.orchestration.center.yaml.config.YamlCenterRepositoryConfiguration not present
       in "reader", line 25, column 3:
            orchestration_ds:
      
    • 推荐到 linux 系统下通过 tar -zxvf apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz 命令解压

  • 复制 mysql-connector-java-5.1.49.jar 到 ShardingSphere 的 bin 目录中

  • 修改 conf 目录下的 config-sharding.yaml 配置文件:

    # 3. 创建客户端连接库
    schemaName: products-proxy
    
    # 1. 设置 MySQL 数据源
    dataSources:
      ds:
        url: jdbc:mysql://127.0.0.1:3306/products?serverTimezone=UTC&useSSL=false
        username: root
        password: 1010
        connectionTimeoutMilliseconds: 30000
        idleTimeoutMilliseconds: 60000
        maxLifetimeMilliseconds: 1800000
        maxPoolSize: 50
    
    # 2. 设置分片规则 - 分表
    shardingRule:
      tables:
        seckills: # 逻辑表名
          actualDataNodes: ds.seckills_${0..1} # 分 2 张表
          tableStrategy: # 分表策略
            inline:
              shardingColumn: ProductId # 分表字段
              algorithmExpression: seckills_${ProductId % 2} # 对 ProductId 取模分表
    
  • 修改 conf 目录下的 server.yaml 配置文件:

    authentication:
      users:
        root:
          password: 123456
        sharding:
          password: sharding 
          authorizedSchemas: products-proxy
    
    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
      allow.range.query.with.inline.sharding: false
    
  • 启动 ShardingSphere-Proxy

    D:ProgramJavaapache-shardingsphere-4.1.1-sharding-proxy-binin>start.bat
    
    # 通过启动日志查看代理数据库的默认端口是 3307
    
    # 新建 mysql 和  mysql-proxy 两个连接备用
    
  • 在 mysql 连接中,新建 productsproducts-proxy数据库

  • 刷新 mysql-proxy 连接,就会看到数据库已经同步过来

  • 打开 mysql-proxy 连接下的 products-proxy 数据库,执行创建 seckills 表的语句

  • 打开 mysql 连接下的 products 数据库,就会发现 sekills_0seckills_1 两张拆分的表

分表原理解析

  • 根据什么原理来分表:表的字段值
  • 如何根据字段值分表:
    • 取模运算(整数类型)
    • hash 运算:先对字符串进行 hash 得到一个值,然后根据 hash 值取模
    • 范围值:0 ~ 10000,10001 ~ 20000,…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6428.html

(0)
上一篇 2023-04-10
下一篇 2023-04-10

相关推荐

  • 降噪耳机音质标杆 荣耀FlyPods3了解一下「终于解决」

    降噪耳机音质标杆 荣耀FlyPods3了解一下「终于解决」  前不久刚换了一部新手机,正当我满心欢喜地准备开启我的游戏之旅时,才发现原来耳机和充电口是一个,这对于我这个游戏党来说可是致命的缺陷啊,插上耳机就充不了电,如果充电的话又听不清游戏里的声音,没办法…

    2023-02-23
    154
  • 什么是idle

    什么是idlePython是一种高级编程语言,其优雅的语法和强大的扩展性让它成为众多开发人员的选择。然而,相对于其他编程语言,Python的开发工具比较简单,有些开发者甚至选择在文本编辑器中手动编写Python代码。在这种情况下,IDLE就成为了一个非常有用的工具。

    2024-05-18
    56
  • mysql主从复制三种模式_mysql表跨库主从复制

    mysql主从复制三种模式_mysql表跨库主从复制两台mysql版本号为5.7以上 主库配置文件设置(注意设置在[mysqld]项中) 主库的ip地址为:192.168.1.1 server-id=1 #唯一id,主库设置1 log-bin=mys…

    2023-04-06
    147
  • 使用replace函数将字符串中的特定字符替换为另外的字符

    使用replace函数将字符串中的特定字符替换为另外的字符在Python编程中,经常需要对字符串进行操作,其中替换字符串中的特定字符是一项常见的操作。Python内置函数replace()就是一个非常实用的字符串操作函数。在本文中,我们将详细介绍如何使用replace函数将字符串中的特定字符替换为另外的字符。

    2024-05-11
    78
  • 如何卸载Anaconda3

    如何卸载Anaconda3在进行Python开发的过程中,有许多人会选择安装Anaconda来管理Python环境。然而,在使用Anaconda的过程中,也难免会出现需要卸载Anaconda的情况,比如要升级到新版本或者出现异常情况时需要重新安装。本篇文章将详细介绍如何卸载Anaconda3。

    2024-07-09
    46
  • day02-MySQL基础知识[通俗易懂]

    day02-MySQL基础知识[通俗易懂]MySQL基本知识 1.数据库 1.1.创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[,create_

    2023-06-08
    147
  • 数据库存储过程和视图_数据库如何分库分表

    数据库存储过程和视图_数据库如何分库分表分库以后,存储过程直接就被判死刑了,铁定不能再用了;SQL 还要看情况(如多表 JOIN),总体来说方向有三个: 一、使用数据库中间件 使用像 Mycat 之类的数据库中间件,报表里的简单 SQL …

    2023-03-10
    152
  • oracle总结「终于解决」

    oracle总结「终于解决」1.创建表空间create tablespance 表名datafile ‘’;– 放在的位置size –设置大小autoextend onnext ; –扩展大小 — 2删除表空间drop

    2023-04-26
    160

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注