• 主从复制到读写分离的奇幻之路


    CSDN话题挑战赛第2期
    参赛话题:Java技术分享

    引言

    面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。对于同一时刻又大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致二点行锁,使得整个系统的查询性能得到极大得改善,因此主从复制应运而生成就了读写分离得传奇之路。下面将详细说明!

    为什么要使用这个技术?

    与其说为什么要使用这个技术,不如先来分析这项技术对应到如今得信息洪流,信息爆炸时代所能解决得实际问题,这就不得不去了解它得优缺点,任何技术都有优缺点,但是我们开发人员懂得将优点发挥到极致并且也要规避其缺点得损害,所以这就需要根据不同得业务需求进行研判。

    假设三分钟才能写入10万条数据,但是1分钟却能读出10万条数据,但当我们从数据库得事务角度去分析,如果要在一个库中同时对这10万数据进行读写操作,一个事务得开始必须得等到上一个事务得结束,那么在等待的过程操作进行了挂载,一直没能执行。但是当我们引入读写分离,那么读在一个库写在一个库,不会应该写的耗时而去影响读的操作,从而可以大大加快数据的处理,提升用户的体验感

    技术案例,实战分享

    使用Sharding-JDBC实现读写分离

    1.引入依赖

    1. <dependency>
    2. <groupId>org.apache.shardingspheregroupId>
    3. <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    4. <version>4.0.0-RC1version>
    5. dependency>
    6. <--德鲁1-->
    7. <dependency>
    8. <groupId>com.alibabagroupId>
    9. <artifactId>druid-spring-boot-starterartifactId>
    10. <version>1.2.8version>
    11. dependency>

    2.yml配置:

    1. spring:
    2. shardingsphere:
    3. datasource:
    4. names:
    5. master,slave
    6. #主数据源
    7. master:
    8. type: com.alibaba.druid.pool.DruidDataSource
    9. driver-class-name: com.mysql.cj.jdbc.Driver
    10. url: jdbc:mysql://192.168.121.136:3306/takeout?characterEncoding=utf-8
    11. username: root
    12. password: 12345678
    13. #从数据源
    14. slave:
    15. type: com.alibaba.druid.pool.DruidDataSource
    16. driver-class-name: com.mysql.cj.jdbc.Driver
    17. url: jdbc:mysql://192.168.121.135:3306/takeout?characterEncoding=utf-8
    18. username: root
    19. password: 12345678
    20. masterslave:
    21. #读写分离配置
    22. load-balance-algorithm-type: round_robin #轮询
    23. #最终的数据源名称
    24. name: dataSource
    25. #主数据源名称
    26. master-data-source-name: master
    27. #从数据源名称列表,多个逗号分隔
    28. slave-data-source-names: slave
    29. props:
    30. sql:
    31. show: true #开启SQL显示,默认false
    32. #允许Bean覆盖
    33. main:
    34. allow-bean-definition-overriding: true

    难点分析

    配置完以上配置之后,先来说说需要注意的点

    1.德鲁1(druid)的依赖引入,否则会再启动服务时候报错,提示创建Bean失败。

    2.需要再yml文件中配置允许Bean覆盖,否则会有数据源冲突报错。

    以上两点可以自己验证。上面配置有详细说明

    技术小结

    掌握主从复制并不难,主要是配置,因为方法已经基于底层原理实现了!正所谓开箱即用!

  • 相关阅读:
    助力教育信创快速发展,统信软件与山东四所高校建立信创应用重点实验室
    【sw网络监控】通过snmp协议相关的snmp-exporter(收集交换机网络监控数据)+ promethus + grafana
    保卫你的应用:探索过滤器和拦截器的奥秘
    洛谷 P2900 [USACO08MAR]Land Acquisition G(斜率优化dp)
    算法--分隔链表(Kotlin)
    计算机毕业设计(附源码)python医院人事管理系统
    Ansible执⾏速度优化
    禁止使用搜索引擎,你了解吗?
    Golang分布式应用之ZooKeeper
    SQL中的字符串截取函数
  • 原文地址:https://blog.csdn.net/ggjklncffd/article/details/127036954