2,Mycat概述

Mycat 是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL 协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native)协议与多个MySQL 服务器通信,也可以用JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N 个小表,存储在后端MySQL 服务器里或者其他数据库里。

Mycat 发展到目前的版本,已经不是一个单纯的MySQL 代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也支持MongoDB 这种新型NoSQL 方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在Mycat 里,都是一个传统的数据库表,支持标准的SQL 语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度,在测试阶段,可以将一个表定义为任何一种Mycat 支持的存储方式,比如MySQL 的MyASIM 表、内存表、或者MongoDB、LevelDB 以及号称是世界上最快的内存数据库MemSQL 上。试想一下,用户表存放在MemSQL上,大量读频率远超过写频率的数据如订单的快照数据存放于InnoDB 中,一些日志数据存放于MongoDB 中,而且还能把Oracle 的表跟MySQL 的表做关联查询,你是否有一种不能呼吸的感觉?而未来,还能通过Mycat自动将一些计算分析后的数据灌入到Hadoop 中,并能用Mycat+Storm/Spark Stream 引擎做大规模数据分析,看到这里,你大概明白了,Mycat 是什么?Mycat 就是BigSQL,Big Data On SQL Database。

 

Mycat原理

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL 语句,首先对SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

当Mycat 收到一个SQL 时,会先解析这个SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到SQL 里分片字段的值,并匹配分片函数,得到该SQL 对应的分片列表,然后将SQL 发往这些分片去执行,最后收集和处理所有分片返回的结果数据,并输出到客户端。以select * from Orders where prov=?语句为例,查到prov=wuhan,按照分片函数,wuhan 返回dn1,于是SQL 就发给了MySQL1,去取DB1 上的查询结果,并返回给用户。

如果上述SQL 改为select * from Orders where prov in (‘wuhan’,‘beijing’),那么,SQL 就会发给

MySQL1 与MySQL2 去执行,然后结果集合并后输出给用户。但通常业务中我们的SQL 会有Order By 以及Limit 翻页语法,此时就涉及到结果集在Mycat 端的二次处理,这部分的代码也比较复杂,而最复杂的则属两个表的Jion 问题,为此,Mycat 提出了创新性的ER 分片、全局表、HBT(Human Brain Tech)人工智能的Catlet、以及结合Storm/Spark 引擎等十八般武艺的解决办法,从而成为目前业界最强大的方案,这就是开源的力量!

 

应用场景

Mycat 发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的应用场景:

 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;

 分表分库,对于超过1000 万的表进行分片,最大支持1000 亿的单表分片;

 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化;

 报表系统,借助于Mycat 的分表能力,处理大规模报表的统计;

 替代Hbase,分析大数据;

 作为海量数据实时查询的一种简单有效方案,比如100 亿条频繁查询的记录需要在3 秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat 可能是最简单有效的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值