第六章:Sharding-JDBC 读写分离

本文介绍如何使用Sharding-JDBC实现读写分离,通过一主多从配置提升数据库处理能力和系统性能,详细展示了MySQL主从同步配置与Sharding-JDBC读写分离配置案例。
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数据源
人口老龄化是指由于生育率下降、预期寿命延长以及人口年龄结构变化等因素,导致人口总体年龄结构向高年龄阶段演变,表现为老年人口数量增加及其占总人口比重不断提高的长期过程 从统计衡量标准看,国际上通常采用60岁及以上人口占比或65岁及以上人口占比衡量人口老龄化程度。其中,65岁及以上人口占总人口比例达到7%,通常认为进入老龄化社会;达到14%,进入深度老龄化;超过20%,进入超老龄化社会。老年人口比重是衡量区域人口老龄化水平最核心、最常用的指标 学术研究中,老龄化数据已成为研究人口结构变化与经济发展关系的重要基础数据资源。系统整理了世界、中国、省份、地级市、区县等层面的老龄化相关指标数据,含65岁及以上人口、65岁及以上人口占比、城镇职工基本养老保险、老年抚养比等,方便大家便捷调用 相关数据:老龄消费需求测算数据,第七次全国人口普查-乡、镇、街道-整理版 一、数据介绍 数据名称:老龄化数据集-世界/中国/省/市/县 数据范围:世界、中国、省、市、县 时间范围:2000-2025年,存在部分缺失 数据来源:世界银行、国家统计局、各地方统计局及年鉴 二、数据指标 1.世界各国层面: 年份 国家/地区 国家/地区代码 老龄人口依赖比(占劳动年龄人口的百分比) 65岁及以上人口占总人口的百分比 65岁及以上女性人口 65岁及以上女性人口(占女性人口的百分比) 65岁及以上男性人口 65岁及以上男性人口(占男性人口的百分比) 65岁及以上总人口 65-69岁女性人口(占女性人口的百分比) 65-69岁男性人口(占男性人口的百分比) 70-74岁女性人口(占女性人口的百分比) 70-74岁男性人口(占男性人口的百分比) 75-79岁女性人口(占女性人口的百分比) 75-79岁男性人口(占男性人口的百分比) 80岁及以上女性人口(占女性人口的百分比)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值