Sharding-JDBC 读写分离
- 理解读写分离
- 面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈
- 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性能得到极大的改善
- 通过一主多从的配置方式,可以将查询请求均匀的分散到多个数据副本,能够进一步的提升系统的处理能力

- 使用多主多从的方式,不但能够提升系统的吞吐量,还能够提升系统的可用性,可以达到在任何一个数据库宕机,甚至磁盘物理损坏的情况下仍然不影响系统的正常运行

- Sharding-JDBC读写分离
- Sharding-JDBC读写分离则根据SQL语义的分析,将读操作和写操作分别路由至主库与从库
- 它提供透明化读写分离,让使用方尽量像使用一个数据库一样使用主从数据库集群

- Sharding-JDBC读写分离配置案例
-
MySQL 主从同步配置
- 参考MySQL主从同步配置文档
-
Sharding-jdbc读写分离配置
# sharding-jdbc 读写分离配置 # 数据源 spring.shardingsphere.datasource.names = master,slave0 spring.shardingsphere.datasource.master.type = com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.master.driver-class-name = com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.master.jdbcUrl = jdbc:mysql://127.0.0.1:3306/master_order?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false spring.shardingsphere.datasource.master.username = root spring.shardingsphere.datasource.master.password = spring.shardingsphere.datasource.slave0.type = com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.slave0.driver-class-name = com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.slave0.jdbcUrl = jdbc:mysql://127.0.0.1:3306/slave_order?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false spring.shardingsphere.datasource.slave0.username = root spring.shardingsphere.datasource.slave0.password = # 指明sharding-jdbc数据源ds0的主从数据源配置 spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name = master spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names = slave0 # 指定t_order表的主键生成策略为SNOWFLAKE spring.shardingsphere.sharding.tables.t_order.key-generator.column = order_id spring.shardingsphere.sharding.tables.t_order.key-generator.type = SNOWFLAKE # 打开sql输出日志 spring.shardingsphere.props.sql.show = true -
代码及测试
@Test public void testSelectByPrimaryKey() { Order order = orderDao.selectByPrimaryKey(393883632147628033L); System.out.println("order = " + order); } -
日志信息
[main] INFO ShardingSphere-SQL - Actual SQL: slave0 ::: SELECT order_id, price, user_id, status FROM t_order WHERE order_id = ? ::: [393883632147628033]- 通过日志可以看出,所有查操作落入slave0数据源
-
本文介绍如何使用Sharding-JDBC实现读写分离,通过一主多从配置提升数据库处理能力和系统性能,详细展示了MySQL主从同步配置与Sharding-JDBC读写分离配置案例。

1万+

被折叠的 条评论
为什么被折叠?



