沈阳网站专业,建设项目查询网站,驻马店logo设计公司,专业做w7系统的网站一. ShardingSphere-Proxy简介
1、简介
Apache ShardingSphere 是一款开源分布式数据库生态项目#xff0c;旨在碎片化的异构数据库上层构建生态#xff0c;在最大限度的复用数据库原生存算能力的前提下#xff0c;进一步提供面向全局的扩展和叠加计算能力。其核心采用可插…一. 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.gz3、启动 ShardingSphere-Proxybin目录
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.yamlauthority:users:- user: root%password: root- user: shardingpassword: shardingprivilege:type: ALL_PERMITTEDtransaction:defaultType: XAproviderType: Atomikos2、配置分表规则文件conf/database-sharding.yaml
vim database-sharding.yamldatabaseName: xinyu_proxy_dbdataSources:ds_0:url: jdbc:mysql://192.168.30.165:3306/xinyudb?serverTimezoneUTCuseSSLfalseusername: rootpassword: Cdxyks!#Sxyd5648connectionTimeoutMilliseconds: 30000idleTimeoutMilliseconds: 60000maxLifetimeMilliseconds: 1800000maxPoolSize: 50minPoolSize: 1ds_1:url: jdbc:mysql://192.168.30.166:3306/xinyudb?serverTimezoneUTCuseSSLfalseusername: 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)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4;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_id1;select * from t_order where order_id1053673476138729473;
select * from t_order where order_id1053673476323278849;select * from t_order where user_id2 order by order_id desc limit 0,10;2、查看数据分布
数据库0
user_id2%20所以在“ds_0”库 表t_order_0 表t_order_1
数据库1
user_id1%21所以在”ds_1”库 表t_order_0
表t_order_1