MyCat详解及使用
Mycat介绍
mycat是Java语言开发的目前比较主流的数据库中间件之一,是mycat团队在阿里开源的 Cobar 产品基础上而研发的,也一直在维护。mycat实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信。
mycat不单只可以做MySQL的代理,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型NoSQL 方式的存储,未来还会支持更多类型的存储。
mycat下载地址
所有版本
http://dl.mycat.org.cn/
linxu 1.6.7.6 下载地址
http://dl.mycat.org.cn/1.6.7.6/20220524101549/
mycat的实现原理
mycat主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
mycat特性
支持前端作为MySQL通用代理
后端JDBC方式支持Oracle,DB2,SQL Server,mongodb,巨杉
基于心跳的自动故障切换,支持读写分离
支持MySQL Cluster,Galera,Percona,cluster集群
支持数据的多片自动路由与聚合
支持sum,count,max等常用的聚合函数,支持跨库分页
支持库内分表,支持单库内部任意join全局表,支持跨库2表join
基于caltlet的多表join
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询
2.0支持多语句 ->如:select * from user1 ; select * from user2;
Blob支持(Binary Large Object),用于存储二进制文件的容器
mycat核心概念
逻辑库
对数据进行分片处理后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库群构成了整个完整的数据库存储。MyCat在操作时,使用逻辑库来代表这个完整的数据库集群,便于对整个集群操作。
逻辑表
逻辑表在分布式数据库中,对应用来说,读写数据的表就是逻辑表。
分片表
是指哪些原有的很大数据的表,需要切分到多个数据库的表,每个分片都拥有一部分数据,所有分片构成完整的数据。例如在MyCat配置中的t_node就属于分片表,数据按照规则被分到dn1、dn2两个分片节点上。
<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1"/>
非分片表
一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片来说的,就是那些不需要进行数据切分的表。如下配置中t_node,只存在于分片节点dn1上。
<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1"/>
ER表
MyCat提出了基于E-R关系的数据分片策略,子表的数据与所关联的父表数据存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据join不会跨库操作。表分组(Table Group)是解决分片数据join的一种很好思路,也是数据切分规划的一条重要规则。
全局表(字典表)
在业务系统中,往往存在大量的字典表,这些表基本不会动,字典表具有一下特征:
变动不频繁;
数据量总体变化不大;
数据规模不大,很少有超过数十万条记录。
分片节点
也就是将一个大表切分到多个数据库上,这个库就被称为分片节点->dataNode。
节点主机
同一台机器上可以有多个分片数据库,这样一个或多个分片节点所在的机器就是节点主机,为了避免单节点主机并发数限制,尽量将读写压力高的节点均衡的放在不同的节点主机上->dotaHost。
分片规则
一个大表被拆分成多个分片表,就需要有一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,能极大的避免后续数据处理的难度。
mycat的应用场景
数据库读写分离,此时配置最为简单,支持读写分离,主从切换
数据库分库分表,这也是mycat的核心功能之一,可以解决数据库分库分表之后的数据插入和查询问题多租户应用,每个应用一个数据库,但程序只需连接mycat,程序不改变,实现多租户化
海量数据的存储及实时查询,使用mycat是一种简单有效的方案
替代Hbase,分析大数据