当前位置: 首页 > news >正文

ShardingSphere-Proxy 数据库中间件MySql分库分表环境搭建

一. ShardingSphere-Proxy简介

1、简介

Apache ShardingSphere 是一款开源分布式数据库生态项目,旨在碎片化的异构数据库上层构建生态,在最大限度的复用数据库原生存算能力的前提下,进一步提供面向全局的扩展和叠加计算能力。其核心采用可插拔架构,对上以数据库协议及 SQL 方式提供诸多增强功能,包括数据分片、访问路由、数据安全等

ShardingSphere-Proxy是跨语言的数据库代理服务端,主要用来处理:分表、分库、读写分离 等。 【默认端口 3307 】

官网地址:https://shardingsphere.apache.org/index_zh.html

2、 什么是分表?

MySQL的InnoDB引擎采用B+ Tree的结构进行数据存储,单张表的极限为2000w,超过这个数量,性能就会下降,从而引出分表的方案。

比如原先将原先的t_order订单表可以拆分为 t_order_1 、t_order_2 等多张表。

3、什么是分库?

从并发量角度思考,如果客户端查询数据并发量比较大,超过了数据库的并发处理能力,就会导致数据库性能下降(因为数据库本身使用的系统资源还是有限的,例如内存资源,CPU资源,磁盘资源等等,都有限,所以导致数据库并发处理能力有限),从而引出分库的概念。

比如原先的商品数据库 GoodsDB,可以拆分为 GoodsDB1、GoodsDB2 等多个数据库。

4、什么是分库分表?

当分库后,但表中的数据量依旧很大,超过2000w,这个时候就需要在分库的基础上,进行分表。

通常分库分表同时使用。

即: GoodsDB1库中有:t_order_1 、t_order_2表, GoodsDB2库中也有:t_order_1 、t_order_2表,

5、常用方案

(1). 进程内方案

使用EFCore进行链接,可以实现分库分表、读写分离。 缺点:资源竞争

(2). 进程外方案

A. MyCat 缺点:配置麻烦

B. ShardingSphere 优点:配置简单

二. ShardingSphere-Proxy 环境准备

1、环境准备

(1)、数据库:MySqL 参考地址 七、阿里云 Linux CentOs7安装MySql

(2)、Java Jdk环境:参考地址 五、Linux安装Java环境

(3)、ShardingSphere-Proxy代理程序(5.5.0): (下载地址: https://shardingsphere.apache.org/document/current/cn/downloads/)
在这里插入图片描述
(4)、连接MySQL的驱动:mysql-connector-java-8.0.11.jar (下载地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/)
在这里插入图片描述

2、部署:(1)、上传shardingsphere-proxy压缩包,解压;(2)、将mysql-connector-java-8.0.11.jar拷贝到 lib 目录
tar -zxvf apache-shardingsphere-5.5.0-shardingsphere-proxy-bin.tar.gz

在这里插入图片描述
在这里插入图片描述

3、启动 ShardingSphere-Proxy(bin目录)
cd /usr/local/shardingsphere/apache-shardingsphere-5.5.0-shardingsphere-proxy-bin/bin
./start.sh #开启
./stop.sh #关闭

在这里插入图片描述

三. ShardingSphere-Proxy 操作

1、配置shardingsphere的访问账户和密码(文件:conf/global.yaml)

该账号用于客户端连接该代理程序使用,与数据库的账号密码没有任何关系。

vim global.yaml
 authority:users:- user: root@%password: root- user: shardingpassword: shardingprivilege:type: ALL_PERMITTEDtransaction:defaultType: XAproviderType: Atomikos

在这里插入图片描述

2、配置分表规则(文件:conf/database-sharding.yaml)
vim database-sharding.yaml
databaseName: xinyu_proxy_dbdataSources:ds_0:url: jdbc:mysql://192.168.30.165:3306/xinyudb?serverTimezone=UTC&useSSL=falseusername: rootpassword: Cdxyks!@#Sxyd5648connectionTimeoutMilliseconds: 30000idleTimeoutMilliseconds: 60000maxLifetimeMilliseconds: 1800000maxPoolSize: 50minPoolSize: 1ds_1:url: jdbc:mysql://192.168.30.166:3306/xinyudb?serverTimezone=UTC&useSSL=falseusername: rootpassword: Cdxyks!@#Sxyd5648connectionTimeoutMilliseconds: 30000idleTimeoutMilliseconds: 60000maxLifetimeMilliseconds: 1800000maxPoolSize: 50minPoolSize: 1rules:
- !SHARDINGtables:t_order:actualDataNodes: ds_${0..1}.t_order_${0..1}tableStrategy:standard:shardingColumn: order_idshardingAlgorithmName: t_order_inlinekeyGenerateStrategy:column: order_idkeyGeneratorName: snowflakeauditStrategy:auditorNames:- sharding_key_required_auditorallowHintDisable: truet_order_item:actualDataNodes: ds_${0..1}.t_order_item_${0..1}tableStrategy:standard:shardingColumn: order_idshardingAlgorithmName: t_order_item_inlinekeyGenerateStrategy:column: order_item_idkeyGeneratorName: snowflakebindingTables:- t_order,t_order_itemdefaultDatabaseStrategy:standard:shardingColumn: user_idshardingAlgorithmName: database_inlinedefaultTableStrategy:none:defaultAuditStrategy:auditorNames:- sharding_key_required_auditorallowHintDisable: trueshardingAlgorithms:database_inline:type: INLINEprops:algorithm-expression: ds_${user_id % 2}t_order_inline:type: INLINEprops:algorithm-expression: t_order_${order_id % 2}t_order_item_inline:type: INLINEprops:algorithm-expression: t_order_item_${order_id % 2}keyGenerators:snowflake:type: SNOWFLAKEauditors:sharding_key_required_auditor:type: DML_SHARDING_CONDITIONS

在这里插入图片描述
在这里插入图片描述

3、Navicate客户端连接,创建订单,插入数据

(1)、SQL操作

create table t_order(order_id BIGINT COMMENT '订单编号', #order_id  分表order_name varchar(150) COMMENT '订单名称',user_id int COMMENT '用户ID', #user_id  分库cdt DATETIME COMMENT '订单时间',
PRIMARY KEY(order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;drop table t_order;
truncate table t_order;insert into t_order values('订单1-1',1,now());
insert into t_order values('订单1-2',1,now());
insert into t_order values('订单1-3',1,now());
insert into t_order values('订单1-4',1,now());
insert into t_order values('订单1-5',1,now());
insert into t_order values('订单1-6',1,now());
insert into t_order values('订单1-7',1,now());
insert into t_order values('订单1-8',1,now());
insert into t_order values('订单1-9',1,now());
insert into t_order values('订单1-10',1,now());insert into t_order values('订单2-1',2,now());
insert into t_order values('订单2-2',2,now());
insert into t_order values('订单2-3',2,now());
insert into t_order values('订单2-4',2,now());
insert into t_order values('订单2-5',2,now());
insert into t_order values('订单2-6',2,now());
insert into t_order values('订单2-7',2,now());
insert into t_order values('订单2-8',2,now());
insert into t_order values('订单2-9',2,now());
insert into t_order values('订单2-10',2,now());select * from t_order where user_id=1;select * from t_order where order_id=1053673476138729473;
select * from t_order where order_id=1053673476323278849;select * from t_order where user_id=2 order by order_id desc limit 0,10;

在这里插入图片描述

(2)、查看数据分布
数据库0

user_id=2%2=0,所以在“ds_0”库
表:t_order_0
在这里插入图片描述
表:t_order_1
在这里插入图片描述

数据库1

user_id=1%2=1,所以在”ds_1”库
表:t_order_0
在这里插入图片描述

表:t_order_1
在这里插入图片描述

http://www.lryc.cn/news/462465.html

相关文章:

  • Pytest+selenium UI自动化测试实战实例
  • 服务器技术研究分析:存储从HBM到CXL
  • 下载并安装 WordPress 中文版
  • 从零开始的LeetCode刷题日记:515.在每个树行中找最大值
  • C语言 | Leetcode C语言题解之第492题构造矩形
  • 在FastAPI网站学python:虚拟环境创建和使用
  • 安全风险评估(Security Risk Assessment, SRA)
  • SQL Injection | SQL 注入 —— 布尔盲注
  • stm32 bootloader写法
  • Unity3D 物体表面水滴效果详解
  • 若依框架中spring security的完整认证流程,及其如何使用自定义用户表进行登录认证,学会轻松实现二开,嘎嘎赚块乾
  • selenium:操作滚动条的方法(8)
  • Discuz | 起尔开发 传奇开服表游戏公益服发布论坛网站插件
  • 问:JAVA对象的数据结构长啥样?
  • STGCN解读(论文+代码)
  • perl读取目录,写入文件
  • JDK-23与JavaFX配置在IDEA中
  • VSCode运行QT界面
  • npm-run-all 使用实践
  • 【CCPC】The 2021 CCPC Guilin Onsite (XXII Open Cup, Grand Prix of EDG) K
  • selenium的实际使用
  • OpenShift 4 - 云原生备份容灾 - Velero 和 OADP 基础篇
  • javaWeb项目-Springboot+vue-校园论坛系统功能介绍
  • centors7升级GLIBC2.18
  • 基于深度学习的异常检测
  • 深入理解 SQL 中的高级数据处理特性:约束、索引和触发器
  • IC验证面试中常问知识点总结(七)附带详细回答!!!
  • 【前端】如何制作一个自己的网页(8)
  • Java之模块化详解
  • HTB:Knife[WriteUP]