CSDN话题挑战赛第2期
参赛话题:Java技术分享
引言
面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。对于同一时刻又大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致二点行锁,使得整个系统的查询性能得到极大得改善,因此主从复制应运而生成就了读写分离得传奇之路。下面将详细说明!
为什么要使用这个技术?
与其说为什么要使用这个技术,不如先来分析这项技术对应到如今得信息洪流,信息爆炸时代所能解决得实际问题,这就不得不去了解它得优缺点,任何技术都有优缺点,但是我们开发人员懂得将优点发挥到极致并且也要规避其缺点得损害,所以这就需要根据不同得业务需求进行研判。
假设三分钟才能写入10万条数据,但是1分钟却能读出10万条数据,但当我们从数据库得事务角度去分析,如果要在一个库中同时对这10万数据进行读写操作,一个事务得开始必须得等到上一个事务得结束,那么在等待的过程操作进行了挂载,一直没能执行。但是当我们引入读写分离,那么读在一个库写在一个库,不会应该写的耗时而去影响读的操作,从而可以大大加快数据的处理,提升用户的体验感
技术案例,实战分享
使用Sharding-JDBC实现读写分离
1.引入依赖
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency> <--德鲁1--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
2.yml配置:
spring: shardingsphere: datasource: names: master,slave #主数据源 master: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.121.136:3306/takeout?characterEncoding=utf-8 username: root password: 12345678 #从数据源 slave: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.121.135:3306/takeout?characterEncoding=utf-8 username: root password: 12345678 masterslave: #读写分离配置 load-balance-algorithm-type: round_robin #轮询 #最终的数据源名称 name: dataSource #主数据源名称 master-data-source-name: master #从数据源名称列表,多个逗号分隔 slave-data-source-names: slave props: sql: show: true #开启SQL显示,默认false #允许Bean覆盖 main: allow-bean-definition-overriding: true
难点分析
配置完以上配置之后,先来说说需要注意的点
1.德鲁1(druid)的依赖引入,否则会再启动服务时候报错,提示创建Bean失败。
2.需要再yml文件中配置允许Bean覆盖,否则会有数据源冲突报错。
以上两点可以自己验证。上面配置有详细说明
技术小结
掌握主从复制并不难,主要是配置,因为方法已经基于底层原理实现了!正所谓开箱即用!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105079.html