一、环境 MySQL版本:5.7.34 ShardingSphere-Proxy:5.1.2 MySQL客户端与tpcc-mysql:172.18.16.156 ShardingSphere-Proxy 建库 # 连接ShardingSphere-Proxy mysql -u root -h 172.18.10.66 -P 3307 -p123456 -- 建库 create database sharding_db w_street_1 varchar(20), w_street_2 varchar(20), w_city varchar(20), w_state char(2), w_zip char(9) d_street_1 varchar(20), d_street_2 varchar(20), d_city varchar(20), d_state char(2), d_zip char(9) c_street_1 varchar(20), c_street_2 varchar(20), c_city varchar(20), c_state char(2), c_zip char(9)
概述 简介 ShardingSphere-JDBC ShardingSphere-Proxy ShardingSphere-Sidecar(TODO) 混合架构 解决方案 线路规划 ShardingSphere GitHub地址:https://github.com/apache/shardingsphere ShardingSphere 官网:https://shardingsphere.apache.org ShardingSphere 站在数据库的上层视角,关注他们之间的协作多于数据库自身。 连接、增量和可插拔是 Apache ShardingSphere 的核心概念。 Apache ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合于当前业务的最佳系统架构
我们今天用ShardingSphere 给大家演示数据分片,包括分库分表、只分表不分库进行说明。 下一节有时间的话在讲讲读写分离吧。 github地址:https://github.com/362460453/boot-sharding-JDBC 正文 目录 前言 正文 ShardingSphere介绍 为什么不用mycat 实践前的准备工作 代码案例 总结 ---- ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy ShardingSphere的功能能帮助我们做什么 数据分片 读写分离 编排治理 分布式事务 2016年初Sharding-JDBC被开源,这个产品是当当的,加入了Apache 后改名为 ShardingSphere ,mycat和ShardingSphere是同类型的中间件,主要的功能,数据分片和读写分离两个都能去做,但是姿势却有很大的差别, 从字面意义上看Sharding 含义是分片、碎片的意思,所以不难理解ShardingSphere
在shardingSphere1.0中,在看到mybatis的列子中,我们可以看到需要配置:mybatisContext.xml和shardingContext.xml。 ? 2.DatabaseShardingStrategy 数据源分片策略 SingleKeyModuloDatabaseShardingAlgorithm 单key模库分片算法 如图所示,图片来自shardingSphere
前言 上一篇我们说了ShardingSphere的读写分离,使用读写分离能够减轻单库的读写操作,从而提升数据库的吞吐量,但是当数据库中表的数据量到达一定数量时,我们可能就会需要进行分片了, 分片又分为垂直分片和水平分片 ShardingSphere数据分片实战 使用ShardingSphere数据分片,我们只需通过简单的配置就能实现,ShardingSphere帮我们屏蔽了底层逻辑,我们也可通过ShardingSphere spring: shardingsphere: mode: type: Standalone repository: type: File 分片算法 ShardingSphere的分片算法有多种,我们也可以自己实现一套分片算法,通过SPI,分片算法的顶层接口是ShardingAlgorithm,目前实现了多种算法。 关于ShardingSphere的数据分片,我们就说到这里,感谢你的观看,我们下期再见 ShardingSphere数据库读写分离
ShardingSphere-JDBC ShardingSphere-JDBC定位为轻量级Java框架,在Java的JDBC层提供额外服务。 ShardingSphere-JDBC ShardingSphere-Proxy ShardingSphere-Sidecar 数据库 任意 MySQL/PostgreSQL MySQL/PostgreSQL 线路规划 三、ShardingSphere核心概念 ShardingSphere有数百个功能模块,但众多模块间的关系却简单明了。 注意DistSQL只能用于ShardingSphere-Proxy,ShardingSphere-JDBC暂不提供。 3. ShardingSphere-Scaling支持将外围数据迁移至ShardingSphere所管理的数据库,或对 ShardingSphere的数据节点进行扩容或缩容。
target=https%3A%2F%2Fgitee.com%2Fcreyanghang%2Fspring-example%2Ftree%2Fmaster%2Fspring-shardingsphere </groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version /** * 插入数据,测试是否写入master * 如果开启事务,读会走master数据源 * @author: yh * @date: 2022/9/ System.out.println(users.size()); } /** * 查询 * @author: yh * @date: 2022/9/ 结果轮询 load-balancer-name: alg_weight # 权重 复制 图片 在这里插入图片描述 访问9次:slave1数据库3次,slave2数据库6次。
spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.shardingsphere </groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version /** * 插入数据,测试是否写入master * 如果开启事务,读会走master数据源 * @author: yh * @date: 2022/9/ System.out.println(users.size()); } /** * 查询 * @author: yh * @date: 2022/9/ 结果轮询 load-balancer-name: alg_weight # 权重 访问9次:slave1数据库3次,slave2数据库6次。
对源码有兴趣的同学可以阅读 shardingsphere-route.jar 包。
UUID,无序,写入性能差 snowflake·: ShardingSphere提供这个算法, 有序,写入性能好,生成性能无上限。 利用Redis作为发号器: String 类型 key:yyyyMMddHHmmssSSS value: 序号 防止时钟不准,key的有效时间为:30s,生产性能受到redis限制,一般业务够用 ShardingSphere 标准类图,ShardingSphere 改写部分的 略有不同。
server-user容器 1.2、创建server-order容器 2、程序实现 2.1、创建实体类 2.2、创建Mapper 2.3、配置垂直分片 3、测试垂直分片 常见错误 前言 垂直分片介绍 ShardingSphere Order> { } @Mapper public interface UserMapper extends BaseMapper<User> { } 2.3、配置垂直分片 # 垂直分片 spring: shardingsphere private OrderMapper orderMapper; /** * 垂直分片:插入数据测试 * @author: yh * @date: 2022/9/ orderMapper.insert(order); } /** * 垂直分片:查询数据测试 * @author: yh * @date: 2022/9/ 常见错误 ShardingSphere-JDBC远程连接的方式默认的密码加密规则是:mysql_native_password 因此需要在服务器端修改服务器的密码加密规则,如下: ALTER USER
ShardingSphere 关注于全链路压测场景下,数据库层面的解决方案。将压测数据自动路由至用户指定的数据库,是 ShardingSphere 影子库模块的主要设计目标。 2. SQL_PARSER sqlCommentParseEnabled: true 然会重启ShardingSphere-Proxy使配置生效: /root/apache-shardingsphere -5.1.1-shardingsphere-proxy-bin/bin/stop.sh /root/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin /shadow/ https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-proxy/distsql /shardingsphere-proxy/distsql/syntax/rql/rule-query/shadow/ https://shardingsphere.apache.org/document
使用规范 支持项: 将外围数据迁移至ShardingSphere所管理的数据库。 将ShardingSphere的数据节点进行扩容或缩容。 ShardingSphere-Scaling目前不是一个独立的产品,而是以ShardingSphere-Proxy中的一个配置项提供相应功能。 -5.1.1-shardingsphere-proxy-bin/lib/ # 重启Proxy /root/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin ),(18,9,2,20),(19,9,3,30),(20,9,4,40),(21,10,1,10),(22,10,2,20),(23,10,3,30),(24,10,4,40); (3)割接 /ral/#%E5%BC%B9%E6%80%A7%E4%BC%B8%E7%BC%A9
例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order。 真实表 在水平拆分的数据库中真实存在的物理表,如上个示例中的t_order_0 到t_order_9。 绑定表 指分片规则一致的一组分片表。 2 | select * from t_order_1 UNION ALL select * from t_order_5 UNION ALL select * from t_order_9 01:01:01',1,10,100), -> (8,'2022-07-01 01:01:01',1,10,100),(8,'2022-08-01 01:01:01',1,10,100),(9, values (9, '2022-09-01 01:01:01', 1, 10, 100) | | resource_2
数据分片 参考: ---- 从业务角度考虑,分为直连、单路由、主从、分库分表四个基本应用场景,对 ShardingSphere-Proxy 和 MySQL 进行性能对比。 ShardingSphere官方文档中说明支持Sysbench和BenchmarkSQL 5.0,但是BenchmarkSQL 5.0本身不支持MySQL数据库(需要自行修改源码重新编译),因此别无选择只能使用 table_name | resource_name | +------------+---------------+ | sbtest11 | sysbench_ds | | sbtest9 | 0 | | shadow | 0 | +--------------------------+-------+ 9 在以前做的tpcc-mysql对比测试中(“5.6.6 消费延迟监控”),Greenplum与MySQL的QPS相差2.75倍,虽然也有差距,但总不像ShardingSphere这般夸张。
于是,我将 Apache ShardingSphere 产品介绍与开发入门通篇阅读了一遍。 那么,本周将围绕 “Apache ShardingSphere” 进行展开。 1. ShardingSphere 提供了数据分片、读写分离、编排治理、分布式事务的能力,然后完美的解决了上述的问题。 2. Apache ShardingSphere 简介 它从2016年开源,到2020年4月16日成为 Apache 软件基金会的顶级项目。 Apache ShardingSphere 架构 ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 ShardingSphere-JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用;ShardingSphere-Proxy 提供静态入口以及异构语言的支持,适用于 OLAP
文章目录 一、简介 二、项目使用 1、引入依赖 2、数据库 3、实体类 4、mapper 5、yml配置 6、测试类 7、数据 一、简介 Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈 Apache ShardingSphere 旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。 ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。
primary key, pwd varchar(50)); insert into t_user(pwd) values ('Hlws5Mb18XIeYZvs'),('fRV$wtz5FMV8bwH9' +----+------------------+------------+ | 1 | Hlws5Mb18XIeYZvs | NULL | | 2 | fRV$wtz5FMV8bwH9 | id | pwd | +----+------------------+ | 1 | Hlws5Mb18XIeYZvs | | 2 | fRV$wtz5FMV8bwH9 -----------------------+ | 1 | Hlws5Mb18XIeYZvs | NULL | | 2 | fRV$wtz5FMV8bwH9 Hlws5Mb18XIeYZvs | NULL | yC81CxCh3To7XKkehDBY2DLWHCA31RdEiQCtSK1KgqQ= | | 2 | fRV$wtz5FMV8bwH9
因此我们先要在ShardingSphere中创建一个新的逻辑数据库,之后所有测试均在此逻辑数据库之中进行。 ShardingSphere-Proxy会不会有同样的问题呢?先说结论,ShardingSphere-Proxy也无法透传客户端连接地址,但这并不是问题,相反如果透传了才会造成混淆。 : /root/apache-shardingsphere-5.1.1-shardingsphere-proxy-bin/bin/stop.sh /root/apache-shardingsphere- 5.1.1-shardingsphere-proxy-bin/bin/start.sh 从一个客户端连接ShardingSphere-Proxy执行查询: mysql -u root - 参考: https://shardingsphere.apache.org/document/current/cn/features/readwrite-splitting/ https://shardingsphere.apache.org
官方地址:http://shardingsphere.apache.org 本文目标 本文将以springboot进行集成演示,以订单表为例,演示shardingsphere分库分表的基本原理及配置。 spring.shardingsphere.datasource.names = db0,db1 spring.shardingsphere.datasource.db0.type = com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.db0.driver-class-name = com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.db0 characterEncoding=utf8&useSSL=false spring.shardingsphere.datasource.db0.username = root spring.shardingsphere.datasource.db0 characterEncoding=utf8&useSSL=false spring.shardingsphere.datasource.db1.username = root spring.shardingsphere.datasource.db1