Appearance
Mycat 介绍
什么是 Mycat
- 一个彻底开源的,面向企业应用开发的大数据库集群。
- 支持事务、ACID【原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)】、可以替代 MySQL 的加强版数据库。
- 一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群。
- 一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server。
- 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品。
- 一个新颖的数据库中间件产品。
目标:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
Mycat2 是 Mycat 社区开发的一款分布式关系型数据库(中间件)。它支持分布式 SQL 查询,兼容 MySQL 通信协议,以 Java 生态支持多种后端数据库,通过数据分片提高数据查询处理能力。
源码地址:
官网:
一些关键特性
- 支持 SQL92 标准
- 支持 MySQL、Oracle、DB2、SQL Server、PostgreSQL 等 DB 的常见 SQL 语法
- 遵守 Mysql 原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
- 基于心跳的自动故障切换,支持读写分离,支持 MySQL 主从,以及 galera cluster 集群。
- 支持 Galera for MySQL 集群,Percona Cluster 或者 MariaDB cluster
- 基于 Nio 实现,有效管理线程,解决高并发问题。
- 支持数据的多片自动路由与聚合,支持 sum,count,max 等常用的聚合函数,支持跨库分页。
- 支持单库内部任意 join,支持跨库 2 表 join,甚至基于 caltlet 的多表 join。
- 支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询。
- 支持分布式事务(弱 xa)。
- 支持 XA 分布式事务(1.6.5)。
- 支持全局序列号,解决分布式下的主键生成问题。
- 分片规则丰富,插件化开发,易于扩展。
- 强大的 web,命令行监控。
- 支持前端作为 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server、mongodb、巨杉。支持密码加密
- 支持 SQL 黑名单、sql 注入攻击拦截
- 支持 prepare 预编译指令(1.6)支持非堆内存(Direct Memory)聚合计算(1.6)
- 支持 PostgreSQL 的 native 协议(1.6)
- 支持 mysql 和 oracle 存储过程,out 参数、多结果集返回(1.6)
- 支持 zookeeper 协调主从切换、zk 序列、配置 zk 化(1.6)
- 支持库内分表(1.6)
- 集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0 开发版)。
MyCat 架构

MyCat 架构主要关键组件
- 前端连接器:负责处理客户端连接,解析 SQL,执行权限认证。
- 解析器:对 SQL 进行语法解析,生成抽象语法树。
- 路由器:根据 SQL 的语义和配置的分片规则,决定 SQL 路由到哪个数据库。
- 后端连接池:维护与后端数据库的连接,执行 SQL 查询。
- 结果集处理:对来自不同数据库的结果集进行合并处理。
MyCat 架构设计的特点
- 基于 MySQL 协议:MyCat 是一个数据库中间件,它完全基于 MySQL 协议,支持所有使用 MySQL 的应用和框架。
- 分布式架构:MyCat 支持数据库的分布式架构,能够进行数据的分片处理,提高数据库操作的效率和可扩展性。
- 读写分离:MyCat 支持读写分离,可以将读操作和写操作分发到不同的数据库节点,优化性能和负载均衡。
- 高可用性:MyCat 提供了数据的高可用解决方案,包括主从复制和故障转移机制,确保数据的持续可用性。
- SQL 解析和优化:MyCat 内置了 SQL 解析器和优化器,可以对 SQL 语句进行解析和优化,提升查询效率。
- 插件化和可扩展性:MyCat 的设计允许使用插件来扩展其功能,提供灵活的定制化选项。
Mycat 的分库分表策略
- 范围分片:根据数据的值的范围进行分片。
- 哈希分片:通过哈希函数对数据进行分片,使数据均匀分布。
- 枚举分片:根据预定义的规则将特定数据映射到特定的数据库或表。
- 自定义分片:用户可以根据业务需求实现自定义的分片策略。
MyCat 的读写分离机制
- 配置主从数据库:在 MyCat 中配置主数据库(用于写操作)和从数据库(用于读操作)。
- SQL 解析:MyCat 解析 SQL,根据 SQL 的类型(查询或更新)决定路由到主库还是从库。
- 负载均衡:对多个从库进行负载均衡,优化读取性能。
- 数据一致性:确保主从数据库的数据同步,维护数据一致性。