什么是MyCat

MyCAT是一款由阿里Cobar演变而来的用于支持数据库,读写分离、分表分库的分布式中间件。MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库同时也支持MongoDB等非关系型数据库

MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。 MyCat 是由java语言写的。

基于MyCat实现读写分离

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。主数据库进行写操作后,数据及时同步到所读的数据库,尽可能保证读、写数据库的数据一致,比如MySQL的主从复制、Oracle的data guard、SQL Server的复制订阅等。

读的数据库:只能做 select.

写的数据库:select、create、insert、delete、update。

实现读写分离,如何路由到不同的数据库进行访问?

MyCat原理:会拦截客户端的所有JDBC请求,根据sql语句判断转发到不同的数据库进行操作。

MyCat类似Nginx:

MyCat 可以实现数据库反向代理,隐藏真实数据库ip地址、负载均衡、黑名单、分片等。

Linux环境安装MyCat实现读写分离

1、上传安装Mycat-server-1.6.5-release-20180122220033-linux.tar

2、解压安装包tar –zxvf

3、配置schema.xml 和server.xml

4、客户端连接端口号: 8066 配置文件介绍:

配置文件介绍:

Linux环境安装MyCat实现读写分离

1、进入bin目录 启动MyCat ./mycat start 停止MyCat ./mycat stop

2、查看/usr/local/mycat/logs wrapper.log日志 如果是为successfully 则启动成功

关闭防火墙:systemctl stop firewalld.service

只可读的账号 user user 端口号8066

可读可写的账号 root 123456 端口号8066

SpringBoot项目整合动态数据源(读写分离)

1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理。由于此方法相对易懂,简单,不做过多介绍。

2. 动态切换数据源,根据配置的文件,业务动态切换访问的数据库:此方案通过Spring的AOP,AspactJ来实现动态织入,通过编程继承实现Spring中的AbstractRoutingDataSource,来实现数据库访问的动态切换,不仅可以方便扩展,不影响现有程序,而且对于此功能的增删也比较容易。

3. 通过mycat来实现读写分离:使用mycat提供的读写分离功能,mycat连接多个数据库,数据源只需要连接mycat,对于开发人员而言他还是连接了一个数据库(实际是mysql的mycat中间件),而且也不需要根据不同 业务来选择不同的库,这样就不会有多余的代码产生。

动态数据源核心配置

在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上。

1.项目中需要集成多个数据源分别为读和写的数据源,绑定不同的key。

2.采用AOP技术进行拦截业务逻辑层方法,判断方法的前缀是否需要写或者读的操作

3.如果方法的前缀是写的操作的时候,直接切换为写的数据源,反之切换为读的数据源 也可以自己定义注解进行封装

动态数据源与多数据源的区别

多数据源是以分包形式在项目中使用。

动态数据源在JVM进行不断的切换数据源,动态数据源包括多数据源。

mycat 官方网站:http://www.mycat.io/

最新文章

  1. Eclipse JAVA项目的 目录结构 和 导入
  2. JavaScript滚动条插件源码
  3. css学习笔记(6)
  4. SQL SERVER2012秘钥
  5. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记19 为Demo添加手势
  6. 编写简单的hashCode方法
  7. asp.net mvc 上传附件验证
  8. python web开发-flask中日志的使用
  9. 【java】package
  10. Lumen与laravel的区别
  11. ios UIScrolloView在storyboard中添加约束
  12. 【BZOJ1306】[CQOI2009]循环赛(搜索)
  13. 7 切片slice
  14. NYOJ 36 LCS(最长公共子序列)
  15. 面向对象之this关键字
  16. aarch64_o2
  17. (LeetCode 83)Remove Duplicates from Sorted Lists
  18. archlinux使用sudo
  19. 香港主机Squid+Stunnel代理搭建
  20. Android SDK中 tools 工具介绍

热门文章

  1. Struts框架----进度1
  2. hwclock和date源码分析
  3. Docs-.NET-C#-指南-语言参考-预处理器指令:C# 预处理器指令
  4. Packetbeat简介
  5. Windows10+VMware Workstation Pro+Ubuntu 16.04+Hadoop-2.6.5+IDEA环境搭建(单机&伪分布式&集群)
  6. HTML5 地理位置定位API(1)
  7. ThinkPhp5 mongodb 使用自定义objectID出错解决
  8. 123457123456#1#-----com.threeapp.qianShuiTingYX01-----潜水艇跑酷游戏01
  9. springboot下jar包方式运行Caused by: java.lang.ExceptionInInitializerError: null
  10. LeetCode_88. Merge Sorted Array