mycat简介
基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设
最新可下载的release版本是1.6-RELEASE
未来规划(mycat2.x)
* 完全实现分布式事务,完全的支持分布式。
* 通过Mycat web(eye)完成可视化配置,及智能监控,自动运维。
* 通过mysql 本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。
* 支持基于zookeeper的主从切换及Mycat集群化管理。
* 通过Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。
* 接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。
* 通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议
关键特性
- 支持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 、巨杉。
- 支持密码加密
- 支持服务降级
- 支持IP白名单
- 支持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开发版)。
适用场景
- 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
- 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
- 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化
- 报表系统,借助于Mycat的分表能力,处理大规模报表的统计
- 替代Hbase,分析大数据
- 作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择
案例
竞品对比
属性 | Mycat | Sharding-jdbc |
---|---|---|
所属公司 | 基于阿里Cobar二次开发,社区维护 | 当当 |
活跃度 | 社区活跃度很高,一些公司已在使用 | 未找到相关社区、Q群 |
资料 | 资料多,github、官网、Q群、书籍 | 资料少,github、官网 |
数据库支持 | Oracle、 SQL Server、 Mysql、PG,DB2、mongodb | 任意 |
ORM支持 | 任意 | 任意 |
事务 | 完全支持 XA 分布式强事务 | 自带弱XA,最大努力送达型柔性事务 |
读写分离 | 支持 | 支持 |
分库 | 支持 | 支持 |
分表 | 支持 | 支持 |
开发 | 开发成本小,代码入侵极小 | 开发成本高,代码入侵大 |
运维 | 维护成本高 | 维护成本低 |
监控 | 有 | 无 |
限制 | SQL语句限制 | 部分JDBC方法不支持、SQL语句限制 |
mycat入门
核心概念
- 逻辑库(schema)
在云计算时代,数据库中间件可以当做一个或多个数据库集群构成的逻辑库 - 逻辑表(table)
在分布式数据库中,对于应用来说,读写数据的表就是逻辑表.
- 分片表
分片表是将数据量很大的表切分到多个数据库实例中 - 非分片表
并非所有表在数据量很大时都需要进行分片,某些表可以不用分片 - ER表
关系型数据库是基于实体关系模型的,Mycat中的ER表便来源于此,Mycat提出了基于E-R关系的数据分片策略,子表的记录与其所关联的父表的记录存放在同一个数据分片上,即字表依赖于父表,通过表分组保证数据关联查询不会垮库操作. - 全局表
在一个真实的业务场景中往往存在大量类似的字典表,这些字典表中的数据变动不频繁,而且数据规模不大,很少超过数十万条的记录,全局表会保证所有分片都复制一份相同的数据.
- 分片表
- 分片节点
将数据切分后,一个大表被分到不同的分片数据库上,每个分片所在的数据库就是分片节点 - 节点主机
将数据切分后,每个分片节点不一定会独占一台机器