iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何通过 ShardingSphere-Proxy 落地分表分库?
  • 516
分享到

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

如何通过ShardingSphere-Proxy落地分表分库? 2020-01-15 22:01:31 516人浏览 无得
摘要

参考:Sharding-Proxy的基本功能使用 1. 环境准备 MySql 5.7 apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz jdk 1.8 mysql-connect

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

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

1. 环境准备

  • MySql 5.7
  • apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz
  • jdk 1.8
  • mysql-connector-java-5.1.49.jar

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,...
您可能感兴趣的文档:

--结束END--

本文标题: 如何通过 ShardingSphere-Proxy 落地分表分库?

本文链接: https://www.lsjlt.com/news/8187.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用ShardingSphere-Proxy实现分表分库
    目录1. 环境准备2. 数据库脚本准备3. 配置 ShardingSphere-Proxy分表原理解析参考:Sharding-Proxy的基本功能使用 1. 环境准备 MySql 5...
    99+
    2024-04-02
  • 如何通过SQLyog分析MySQL数据库
    这篇文章给大家介绍如何通过SQLyog分析MySQL数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。数据库、表格(table)和列树(column tree)该程序一启动就开始询问...
    99+
    2024-04-02
  • MySQL如何分库分表
    1. 我们为什么需要分库分表 在分库分表之前,就需要考虑为什么需要拆分。我们做一件事,肯定是有充分理由的。所以得想好分库分表的理由是什么。我们现在就从两个维度去思考它,为什么要分库?为什么要分表? 1.1 为什么要分库 如果业务量剧增,数...
    99+
    2023-08-17
    mysql 数据库
  • 数字化门店如何通过开发小程序来落地
    本篇内容介绍了“数字化门店如何通过开发小程序来落地”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数字化如何落地呢?具有打通流量渠道“可能性”...
    99+
    2023-06-27
  • Java如何实现分库分表
    一、为啥要分库分表 在大型互联网系统中,大部分都会选择mysql作为业务数据存储。一般来说,mysql单表行数超过500万行或者单表容量超过2GB,查询效率就会随着数据量的增长而下降。这个时候,就需要对表进行拆分。 那么应该怎么拆分呢? 通...
    99+
    2023-08-31
    java 开发语言
  • mysql分库分表如何实现
    MySQL分库分表可以通过以下几个步骤实现: 水平分库:将原始的单个数据库分成多个独立的数据库。每个数据库可以独立运行在不同的服务...
    99+
    2023-10-27
    mysql
  • 如何在mysql中切分分库分表
    本篇文章为大家展示了如何在mysql中切分分库分表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、水平切分水平切分又称Sharding,是将同一表中的记录分割成多个结构相同的表中。Sharding...
    99+
    2023-06-15
  • 数据库中如何实现分库分表
    这篇文章将为大家详细讲解有关数据库中如何实现分库分表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 分片是解决数据库存储容量限制的直接途径。分片包括垂直分片与水平分片两...
    99+
    2024-04-02
  • MySQL中如何实现分库分表
    本篇文章为大家展示了MySQL中如何实现分库分表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、    背景介绍1.大数据...
    99+
    2024-04-02
  • 通过MySQL开发实现分库分表与水平扩展的项目经验分享
    通过MySQL开发实现分库分表与水平扩展的项目经验分享引言:随着大数据时代的到来,数据量的爆炸式增长使得传统的单机数据库已经无法满足业务需求。为了解决数据存储和查询的性能问题,分库分表与水平扩展成为了当下非常流行的技术。本文将分享一些通过M...
    99+
    2023-11-02
    水平扩展 项目经验分享 MySQL分库分表
  • MySQL分表分库如何进行数据切分
    这篇文章主要讲解了“MySQL分表分库如何进行数据切分”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL分表分库如何进行数据切分”吧!数据库分布式核心...
    99+
    2024-04-02
  • 如何使用MyCat分表分库原理分析
    这篇文章给大家分享的是有关如何使用MyCat分表分库原理分析的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务...
    99+
    2024-04-02
  • 分库分表如何处理主键ID
    当关系型数据库数据量过大时,通常会采用分库分表降低数据库查表压力。分库分表有多种,有分一个库多张分表额,有分多个库多张表的。一般分库分表使用ShardingSphere分表,建分片键等。但是分库分表之后,主键ID如何处理呢?相同业务表不同分...
    99+
    2023-08-20
    数据库 java mysql
  • 如何使用分库分表中间件
    这篇文章主要介绍“如何使用分库分表中间件”,在日常操作中,相信很多人在如何使用分库分表中间件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用分库分表中间件”的疑惑有所帮...
    99+
    2024-04-02
  • MySQL-如何分库分表?一看就懂
    一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从),主库容量肯...
    99+
    2023-09-04
    mysql java
  • Oracle如何通过正则表达式分割字符串REGEXP_SUBSTR
    这篇文章主要介绍Oracle如何通过正则表达式分割字符串REGEXP_SUBSTR,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!REGEXP_SUBSTR函数格式如下: functi...
    99+
    2024-04-02
  • 如何通过一条数据库语句做数据分析
    如何通过一条数据库语句做数据分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义物理数据源添加 SQL 数据集时首要任务就是先在 [web 应用根目录]/WEB-INF/ra...
    99+
    2023-06-04
  • 如何通过索引优化PHP与MySQL的数据分片和分库查询?
    在大型web应用中,为了提高性能和可伸缩性,常常需要将数据存储在多个数据库实例中,这就需要进行数据分片和分库查询。然而,随着数据量的增加,分片查询可能会导致查询性能下降的问题。为了解决这个问题,我们可以通过优化索引来改善查询性能。本文将详细...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • MySQL普通表如何转换成分区表
    小编给大家分享一下MySQL普通表如何转换成分区表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • 详解分库分表后非分片键如何查询
    目录正文设计一:冗余法方法二:索引表法方法三:基因法小结正文 我们知道在分库分表中对于toC业务来说,需要选择用户属性如 user_id 作为分片键,不推荐使用order_id这样...
    99+
    2023-03-10
    分库分表非分片键查询 非分片键查询
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作