ShardingSphere-Proxy是服务ShardingSphere分布式数据库中间件的一部分,它提供了「数据库代理」功能。系列通过引入ShardingSphere-Proxy,服务可以在无需改动应用程序代码的系列情况下,实现分库分表的服务数据库分片、读写分离、系列逻辑表达式分片等功能。服务ShardingSphere-Proxy独立运行于应用程序和数据库之间,系列充当数据库的服务代理,自动将请求路由至相应的系列数据库节点。
官网地址:https://shardingsphere.apache.org
官网下载(5.4.0版本):https://shardingsphere.apache.org/document/current/cn/downloads/
官网下载很慢,服务网盘下载(推荐):「apache-shardingsphere-5.4.0-shardingsphere-proxy-bin.tar.gz」来自UC网盘分享https://drive.uc.cn/s/cc1882af6a9a4
下载 mysql-connector-java-8.0.11.jar,并将其放入 ext-lib 或 lib 目录下。
mysql-connector-java-8.0.11.jar包下载地址:来自UC网盘分享https://drive.uc.cn/s/f9b1c5d7c0f64
conf目录下server.yaml配置文件,主要配置代理数据库的用户名、密码、权限。
authority: users: - user: root password: 123456 privilege: type: ALL_PERMITTEDprops: max-connections-size-per-query: 1 kernel-executor-size: 16 # Infinite by default. proxy-frontend-flush-threshold: 128 # The default value is 128. sql-show: false check-table-metadata-enabled: false
conf目录下sconfig-sharding.yaml配置文件,主要配置具体的分库分表规则:
databaseName: sharding_dbdataSources: ds_0: url: jdbc:mysql://127.0.0.1:3306/sharding_0?serverTimezone=UTC&useSSL=false username: root password: "123456" ds_1: url: jdbc:mysql://127.0.0.1:3306/sharding_1?serverTimezone=UTC&useSSL=false username: root password: "123456"rules: - !SHARDING tables: company: actualDataNodes: ds_$->{ 0..1}.company databaseStrategy: standard: shardingColumn: id shardingAlgorithmName: id_inline product: actualDataNodes: ds_$->{ 0..1}.product defaultDatabaseStrategy: standard: shardingColumn: company_id shardingAlgorithmName: database_inline shardingAlgorithms: database_inline: type: INLINE props: algorithm-expression: ds_$->{ company_id % 2} id_inline: type: INLINE props: algorithm-expression: ds_$->{ id % 2} - !BROADCAST tables: # 广播表规则列表 - permission
注意上面是url,而不是jdbcUrl,官方这么说的:
图片
否则启动代理数据库会出现如下异常:
Unable to find property 'jdbcUrl' on class: org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDataSourceConfiguration
conf目录下config-readwrite-splitting.yaml配置文件,主要配置数据库的读写分离。
往write_ds数据库写数据的时候会自动同步到read_ds_0、read_ds_1两个库中。读取数据的时候会随机从read_ds_0、read_ds_1选择一个数据源进行读取。
databaseName: readwrite-splitting_dbdataSources: write_ds: url: jdbc:mysql://127.0.0.1:3306/demo_write_ds?serverTimeznotallow=UTC&useSSL=false username: root password: 123456 read_ds_0: url: jdbc:mysql://127.0.0.1:3306/demo_read_ds_0?serverTimeznotallow=UTC&useSSL=false username: root password: 123456 read_ds_1: url: jdbc:mysql://127.0.0.1:3306/demo_read_ds_1?serverTimeznotallow=UTC&useSSL=false username: root password: 123456rules:- !READWRITE_SPLITTING dataSources: readwrite_ds: writeDataSourceName: write_ds readDataSourceNames: - read_ds_0 - read_ds_1
创建sharding_0和sharding_1两个数据库。两个数据库完全一样,包含如下数据表:
CREATE DATABASE sharding_0 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;CREATE DATABASE sharding_1 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;CREATE TABLE `company` ( `id` bigint(20) NOT NULL COMMENT '主键id', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;CREATE TABLE `permission` ( `id` bigint(20) NOT NULL COMMENT '主键id', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;CREATE TABLE `product` ( `id` bigint(20) NOT NULL COMMENT '主键id', `company_id` bigint(20) NULL DEFAULT NULL COMMENT '公司id', `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
在bin目录下:
# mac/linuxsh start.sh 3307# windowsstart.bat 3307
启动日志位置:logs/skywalking-oap-server.log
代理数据库对于开发人员来说与普通数据库的操作无异,既可通过命令行,也可通过可视化工具来进行连接和操作。
通过命令连接代理数据库:
mysql -h127.0.0.1 -P3307 -uroot -p123456
通过可视化工具连接代理数据库:
图片
在代理数据库company表上添加企业数据记录。
图片
偶数id的企业在sharding_0数据库,奇数id企业在sharding_1数据库。
图片
图片
在代理数据库product表上添加商品数据记录。
company_id为偶数的商品在sharding_0数据库,company_id为奇数的商品sharding_1数据库。保证了一个企业的商品全部在一个库里面。
图片
图片
在代理数据库permission表上添加权限数据记录。
被代理的两个数据库的数据都一样。
图片
ShardingSphere-Proxy是在数据库和应用程序之间起到了一个桥梁的作用,对于应用程序来说,它不需要感知ShardingSphere-Proxy的存在,依然可以使用原来的方式操作数据库。也就是说,ShardingSphere-Proxy对于应用程序来说是透明的,不需要额外的代码实现或者调整。
图片
Spring Cloud 微服务系列 完整的代码在仓库的sourcecode/spring-cloud-demo目录下。
gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog
github:https://github.com/tigerleeli/xiaohuge-blog
责任编辑:武晓燕 来源: 小虎哥的技术博客 微服务数据库应用程序(责任编辑:百科)
新设和撤出展开“拉锯战” 券商营业部转型财富管理成共识 扩大市场份
北京首都机场股份(00694.HK)年度由盈转亏20.35亿元 不派息
中盈盛达融资担保(01543.HK)完成发行2.60亿元公司债 票面利率为4.60%
贸易战损人不利己 美国众议院议长敦促特朗普总统停止推进新关税方案
欧美股市大幅下挫 日经225指数跌逾2% 韩国首尔综指跌逾1%
智升集团控股(08370.HK)发布业绩公告:全年公司拥有人应占亏损2700万元