MyCat--基本内容
Posted 走出自己的未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyCat--基本内容相关的知识,希望对你有一定的参考价值。
它是一个开源的分布式数据库系统,是一个实现了mysql协议的server,前端用户可以把它看做是一个数据库代理,用户mysql客户端工具或命令行访问,而其后端可以用mysql原生协议与多个mysql服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库。mycat就是一个近似等于mysql的数据库服务器,可以用连接mysql的方式去连接mycat,大多数情况下,可用熟悉的对象映射框架使用mycat,但建议对于分片表,尽量使用基础的sql语句,这样能使性能达到最优。
它是一个强大的数据库中间件,不仅仅可以用作读写分离,以及分表分库、容灾备份,而且可以用于多租户应用开发、云平台基础设施。
当mycat收到一个sql语句时,会先解析这个sql,查找涉及到的表,然后看表的定义,如果有分片规则,则取到sql里分片字段的值,并匹配分片函数,得到该sql对应的分片列表,然后将sql发送这些分片去执行。最后收集和处理所有分片返回的结果数据,并输出到客户端。
以select * from Orders where prov=?语句为例,查到prov=wuhan,按照分片函数,wuhan返回dn1,于是sql就发送给mysql1,获取db1上的查询结果,并返回给用户
如果是select * from Orders where prov in('wuhan','beijing'),那么sql就好发给mysql1和mysql2区执行,然后结果集合并后输出给用户。但通常业务中我们的sql语句会有order by以及limit语法,此时就涉及到结果集在mycat端的二次处理,此时将增加复杂度,最复杂的属于两个表的join问题。为此,mycat提供了ER分片、全局表、HBT人工智能的catlet、以及结合storm/spark引擎等来解决。
应用场景:
单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
多租户应用,每个应用一个库,但应用程序只连接mycat,从而不改造程序本身,实现多租户
报表系统,借助于mycat的分表能力,处理大规模报表的统计
替代hbase,分析大数据
作为海量数据实时查询的一种简单有效的方案
以上是关于MyCat--基本内容的主要内容,如果未能解决你的问题,请参考以下文章