ShardingSphere-5.0.0.beta-proxy分库分表demo
示例在linux环境
安装proxy
下载proxy安装包和mysql驱动包
-
proxy: wget https://mirrors.bfsu.edu.cn/apache/shardingsphere/5.0.0-beta/apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz
-
mysql驱动: wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.31/mysql-connector-java-5.1.31.jar
解压和驱动包放置
tar -zxvf apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz
如下目录结果:
mysql驱动移动到lib目录下,如果使用postgresql数据库,那就把相应postgresql驱动放在lib目录下
cp mysql-connector-java-5.1.31.jar apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin/lib
修改conf下配置
conf/server.yaml
文件最后一行追加以下内容,这里配置root和sharding用户,密码都是123456
rules:
- !AUTHORITY
users:
- root@%:123456
- sharding@:123456
provider:
type: NATIVE
conf/config-sharding.yaml 分库分表
最后一行追加以下内容
#对外暴露的数据库名称
schemaName: t_order
dataSources:
ds_0:
url: jdbc:mysql://8.142.97.56:3306/demo_write_ds?serverTimezone=UTC&useSSL=false
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
maintenanceIntervalMilliseconds: 30000
ds_1:
url: jdbc:mysql://8.142.97.56:3306/demo_read_ds_0?serverTimezone=UTC&useSSL=false
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
maintenanceIntervalMilliseconds: 30000
rules:
- !SHARDING
tables:
t_order:
actualDataNodes: ds_${0..1}.t_order_${0..3}
tableStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: t_order_inline
keyGenerateStrategy:
column: order_id
keyGeneratorName: snowflake
defaultDatabaseStrategy:
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${user_id % 2}
t_order_inline:
type: INLINE
props:
algorithm-expression: t_order_${order_id % 4}
- 两个库、每个库四个表,使用user_id分库,order_id分表,字段类型尽量使Integer、Long,谨慎使用String类型
- ShardingSphere5.0.0-beta配置相对4.X有些变化:shardingRule改rules
- sql脚本如下
CREATE TABLE `t_order_0` (
`order_id` bigint(32) NOT NULL COMMENT '订单id',
`item` varchar(32) DEFAULT NULL COMMENT '商品名称',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表1';
CREATE TABLE `t_order_1` (
`order_id` bigint(32) NOT NULL COMMENT '订单id',
`item` varchar(32) DEFAULT NULL COMMENT '商品名称',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表2';
CREATE TABLE `t_order_2` (
`order_id` bigint(32) NOT NULL COMMENT '订单id',
`item` varchar(32) DEFAULT NULL COMMENT '商品名称',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表1';
CREATE TABLE `t_order_3` (
`order_id` bigint(32) NOT NULL COMMENT '订单id',
`item` varchar(32) DEFAULT NULL COMMENT '商品名称',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表2';
实际效果
通过navicat远程链接
总结
- Sharding-Proxy的定位是透明化的数据库代理,它封装了数据库二进制协议,用于完成对异构语言的支持。目前兼容MySQL和POSTGRESQL,可以使用任何兼容MySQL或PG协议的客户端进行访问
- ShardingSphere-jdbc是直接对原生jdbc的改写
- ShardingSphere-proxy代理后,屏蔽了底层的分库分表信息,就等同于使用一个mysql数据库一样方便,如果Java开发:生产中大部分都是使用ShardingSphere-jdbc;
ShardingSphere-jdbc优点:jdbc版是jar提供服务,轻量、小而美,没有其他运维工作, 相对没有proxy这层网络开销、性能高,一般在运维工作中使用proxy,方便查询数据,而不要各种跨库跨表操作,缺点:目前jdbc仅支持Java语言开发, 其他语言开发需要使用proxy