发现MyCat这个东西,觉得还是有很多应用场合,之前为了mysql读写分离、分布等伤透脑筋,没想到有现成的中间件工具,看来很多有经验的公司是受到过折磨,才整出好工具。方法和工具的发明,总是因为问题的存在。暂时还没时间真正部署下mycat来研究,先转载关于mycat的介绍,地址:http://www.csdn.net/article/2015-07-16/2825228

摘要:MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。本文带你全面了解MyCat。

为什么需要MyCat?

虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。

MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。2014年MyCat首次在上海的《中华架构师》大会上对外宣讲引发围观,更多的人参与进来,随后越来越多的项目采用了MyCat。

MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。

MyCat是什么?

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

MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度

图1 MyCat架构设计图

MyCat解决了哪些问题

1. 连接过多问题,可以通过MyCat统一管理所有的数据源,后端数据库集群对前端应用程序透明。使用MyCat之前系统结构如图2。

图2  MyCat早前系统架构

MyCat引入连接复用解决多应用竞争问题,通过MyCat改造后,如图3所示。

图3  改造后的MyCat

2. 独创的ER关系分片,解决E-R分片难处理问题,存在关联关系的父子表在数据插入的过程中,子表会被MyCat路由到其相关父表记录的节点上,从而父子表的Join查询可以下推到各个数据库节点上完成,这是最高效的跨节点Join处理技术,也是MyCat首创。

图4  独创的ER关系分片,是MyCat首创

3. 采用全局分片技术,每个节点同时并发插入和更新数据,每个节点都可以读取数据,提升读性能的同时,也解决跨节点Join的效率。

图5 采用全局分片技术

4. 通过人工智能的catlet支持跨分片复杂SQL实现以及存储过程支持等。使用方式主要通过MyCat注释的方式来执行,如下:

(1)跨分片联合查询注解支持:

/*!MyCat:catlet=demo.catlets.ShareJoin / select bu. ,sg.* from base_user bu,sam_glucose sg where bu.id_=sg.user_id;

注:sam_glucose是跨分片表。

(2)存储过程注解支持:

/*!MyCat: sql=select * from base_user where id_=1;*/ CALL proc_test();

注:目前执行存储过程通过MyCat注解的方式执行,注意需要把存储过程中的sql写到注解中。

(3)批量插入与ID自增长结合的支持:

/*!MyCat:catlet=demo.catlets.BatchInsertSequence */ insert into sam_test(name_) values(‘t1’),(‘t2’);

注:此方式不需要在sql语句中显示的设置主键字段,程序在后台根据primaryKey配置的主键列,自动生成主键的sequence值并替换原sql中相关的列和值;

(4)获取批量sequence值的支持:

/*!MyCat:catlet=demo.catlets.BatchGetSequence */SELECT MyCat_get_seq(‘MyCat_TEST’,100);

注:此方法表示获取MyCat_TEST表的100个sequence值,例如当前MyCat_TEST表的最大sequence值为5000,则通过此方式返回的是5001,同时更新数据库中的MyCat_TEST表的最大sequence值为5100。

(5)更好地支持数据库读写分离与高可用性,MyCat支持基于MySQL主从复制状态的高级读写分离控制机制(比如Slave_behind_master <100则开启),而一旦检测到主从同步出错或者延时超过发展,则自动排除readHost,防止程序读到很久的旧数据。

图6  Mycat支持基于MySQL主从复制状态的高级读写分离控制机制

MyCat技术原理

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

图7  Orders被分为三个分片datanode

如图7所示,Orders表被分为三个分片datanode(简称dn),这三个分片是分布在两台MySQL Server上(DataHost),即datanode=database@datahost方式,因此你可以用一台到N台服务器来分片,分片规则为(sharding rule)典型的字符串枚举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function),这里的分片字段为prov而分片函数为字符串枚举方式。当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等。

MyCat下一步规划

强化分布式数据库中间件的面的功能,使之具备丰富的插件、强大的数据库智能优化功能、全面的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能。

进一步挺进大数据计算领域,深度结合Spark Stream和Storm等分布式实时流引擎,能够完成快速的巨表关联、排序、分组聚合等OLAP方向的能力,并集成一些热门常用的实时分析算法,让工程师以及DBA们更容易用MyCat实现一些高级数据分析处理功能。

(转载)MyCat:开源分布式数据库中间件相关推荐

  1. MyCat:开源分布式数据库中间件之数据库分片和读写分离配置

    mycat权威文档指南下载 1.   MyCAT介绍 1.1. 什么是MyCAT? 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的"大数据库集群" 支持事务.ACI ...

  2. 开源分布式数据库中间件MyCat架构简介(一)——基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理

    目录 前言 开源分布式数据库中间件MyCat架构简介--MyCat源起 一.数据库切分概述:OLTP和OLAP 二.关系型数据库和NoSQL数据库 三.关系型数据库和NoSQL数据库的特点及优缺点 1 ...

  3. 开源分布式数据库中间件MyCat架构简介(二)——基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理

    目录 前言 基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理 一.关于Mycat 二.Mycat 实现原理 三.MyCat 应用场景 四.MyCat 未来展望 五.Mycat 中相关概念 ...

  4. 开源分布式数据库中间件

    转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性 ...

  5. 安排,Mycat教程-分布式数据库中间件课程

    来源:来自网络,如侵权请告知博主删除,感谢????.仅学习使用,请勿用于其他-  有粉丝问我要分布式数据库相关的东西,所以今天小编给大家安排一个. 有的时候后台可能会漏一些消息,然后你提的需求我没看见 ...

  6. 华为云分布式数据库中间件DDM和开源MyCAT对比

    前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...

  7. 阿里Mycat 和京东ShardingSphere:分布式数据库中间件哪家强?

    文章目录 Mycat ShardingSphere Sharding-JDBC Sharding-Proxy Sharding-Sidecar 混合架构 总结 大家好!我是只谈技术不剪发的 Tony ...

  8. 分布式数据库中间件Sharding-JDBC介绍

    前文中介绍了分布式数据库中间件Mycat的一些特性,作为对比本文简要介绍Sharding-JDBC的一些特性以及分片的实现原理,进行对比分析以了解. 1.ShardingSphere介绍 Shardi ...

  9. 开源的分布式数据库中间件系统Mycat和阿里巴巴Cobar的对比

    mycat 不得不说的缘分 原创 2016年04月15日 15:48:17 27834 1,愕然回首,它在灯火阑珊处 关于mysql集群中间件,以前写在应用程序里面,由开发人员实现,在配置文件里面写多 ...

最新文章

  1. Linux学习之系统编程篇:与信号集有关的函数
  2. 征战蓝桥 —— 2016年第七届 —— C/C++A组第10题——最大比例
  3. UIWindowLevel详解
  4. 程序员面试必备:动图演示十大经典排序算法及代码实现
  5. Python:for的多种写法
  6. 如何批量修改网页 更新网站 一键保存 windows查看和排序
  7. (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
  8. 百度人脸识别技术应用002---百度云上创建人脸库_分组_以及通过网页上传人脸照片到人脸分组
  9. 计算机应用202001常规,2001年4月份全国高等教育自学考试计算机应用基础试题
  10. C语言struct 函数,C语言结构体史上最详细的讲解
  11. from scipy.misc import comb ImportError: cannot import name ‘comb‘
  12. Python中requirement 的使用
  13. 首金奥运健儿杨倩,获得金牌和奖金缴纳个税吗?雅戈尔赠送她一套房,交税吗?
  14. 【Leetcode】1526. Minimum Number of Increments on Subarrays to Form a Target Array(配数学证明)
  15. 硬笔书法的产生与兴起
  16. 【超简易】网站ioc图标添加【超详细】
  17. UX设计师是做什么的,现在怎么样
  18. 51nod 13831048 整数分解为2的幂 [递推]【数学】
  19. 深圳美景品牌策划机构:英国知名时尚鞋履品牌IGX签约美景策划
  20. 干货 | 提升50分,Trip.com 机票基于 PageSpeed 的前端性能优化实践

热门文章

  1. python求数列的积_python小游戏学习笔记4-2(列表【】,数列矩阵排列)
  2. 通过模拟器看Windows Phone 7
  3. 20175316 盛茂淞 实验一 Java开发环境的熟悉
  4. openstack newton noVNC bug 解决方法
  5. eclipse javaw.exe in your current path问题
  6. HTML5 Canvas Text实例1
  7. 不要去追一匹马,用追马的时间种草
  8. htaccess分布式配置文件常用写法
  9. 用css3写遨游的logo
  10. 过程中心方法论,事务中心方法论。