一、背景

随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。

当用户表达到千万级别,在做很多操作的时候都会很吃力,所以当数据增长到1000万以上就需要分库分表来缓解单库(表)的压力。

二、mycat原理

可以用拦截形容,它拦截了用户发送过来的SQL语句,首先对sql语句做了一些特定的分析,如分片分析,路由分析,读写分析,读写分离分析,缓存分析等,然后将此sql发送后端的真是数据库,并将反馈的结果做适当的处理,最终返回给用户

三、mycat介绍

•一个用于MySQL读写分离和与数据切分的高可用中间件
•一个模拟为MySQLServer的超级数据库代理
•一个能平滑扩展支持1000亿大表的分布式数据库系统 (普通单表1kw以下)
•一个可管控多种关系数据库的数据库路由器
•一个彻底开源的,面向企业应用开发的大数据库集群
• 支持事务、ACID、可以替代MySQL的加强版数据库
•一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
•一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
• 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
•一个新颖的数据库中间件产品

四、什么是分库分表

简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。

数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数
据的水平(横向)切分。

垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。

水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。

五、分片介绍

5.1垂直切片

将不同的表切分到不同的数据库中

5.2水平切片

将同一类型表按照分片条件切分到不同的数据库中(常用)

六、配置文件

mycat主要有3个配置文件,rule.xml,schema.xml和server.xml,这主要对这3个文件作讲解

七、 关键特性

-遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。
-基于心跳的自动故障切换,支持读写分离,支持MySQL一双主多从,以及一主多从
-有效管理数据源连接,基于数据分库,而不是分表的模式。
-基于Nio实现,有效管理线程,高并发问题。
-支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
-支持2表join,甚至基于caltlet的多表join。
-支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
-支持多租户方案。-支持分布式事务(弱xa)
-支持全局序列号,解决分布式下的主键生成问题。
-分片规则丰富,插件化开发,易于扩展。
-强大的web,命令行监控。
-支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉。
-集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

八、安装

官网下载: http://www.mycat.io/

下载后解压,进入mycat\bin 目录

双击启动 startup_nowrap.bat

一、mycat介绍的更多相关文章

  1. MYCAT介绍(转)

    从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个M ...

  2. MYCAT介绍

    为什么需要MyCat? http://www.mycat.org.cn/ http://www.csdn.net/article/2015-07-16/2825228

  3. MyCat 介绍、分片规则、调优的内容收集

    一.MyCat的简介 MyCat高可用.负载均衡架构图: 详细知识点:  MySQL分布式集群之MyCAT(一)简介(修正) 二.MyCat的schema.xml讲解 详细知识点:MySQL分布式集群 ...

  4. Mycat 介绍

    Mycat 是什么 Mycat是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL客户端工具和命 ...

  5. mycat入门教程

    github https://github.com/MyCATApache/Mycat-Server myCat介绍 myCat的诞生,要从其前身Amoeba和Cobar说起. Amoeba(变形虫) ...

  6. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  7. [待完善]mycat分布式架构部署

    mycat介绍:http://mycat.org.cn/ mycat分布式架构部署

  8. JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法

    1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL ...

  9. JAVAEE——宜立方商城13:订单系统实现、订单生成、Mycat数据库分片

    1. 学习计划 1.订单系统实现 2.订单生成 3.Mycat数据库分片 2. 订单系统 2.1. 功能分析 1.在购物车页面点击“去结算”按钮,跳转到订单确认页面 a) 必须要求用户登录 b) 使用 ...

随机推荐

  1. 传统式与自助式BI分析平台有什么区别

    如今自助式BI分析平台已经成为众多企业进行数据分析工作时的首选,究竟自助式BI分析平台在数据分析中有哪些优势,可以受到企业如此的青睐与追捧呢?小编将在本文中,跟大家一起来了解自助式BI分析平台的概念. ...

  2. Zabbix是什么?

    概述 Zabbix 是一个企业级的分布式开源监控方案,可以监控服务器健康性以及网络参数的一款软件,Zabbix几乎可以为任何时间配置邮件警告,这样用户可以实时通过邮箱接收服务器所发生的任何问题.对于已 ...

  3. N种排序算法

    本文根据<算法(第4版)>和<算法图解>整理.文中代码使用python编写. (一)选择排序 每次遍历整个数组,选出其中最小值.如果数组长度为n,则需要(n-1)+(n-2)+ ...

  4. shell之局域网内脚本检查主机网络通讯(附并发改写)

    转至:https://blog.csdn.net/yrx420909/article/details/104355825 需求:写一个脚本,局域网内,把能ping通的IP和不能ping通的IP分类,并 ...

  5. [炼丹术]基于SwinTransformer的目标检测训练模型学习总结

    基于SwinTransformer的目标检测训练模型学习总结 一.简要介绍 Swin Transformer是2021年提出的,是一种基于Transformer的一种深度学习网络结构,在目标检测.实例 ...

  6. AcWing 325. 计算机

    传送门 题目大意: 一棵无根树,每条边有一个距离,求每个顶点到距离其最远的顶点的距离. 思路: 考虑树形DP+换根. 令D[x]x到以x为根的子树当中的最长距离,d[x]为次长距离,U[x]为x向上走 ...

  7. 针对python输入要求

    针对python输入要求 类型: 1.输入行数不确定,并且每一行输入一个数据. a=[] b=input() while b!='-1': //指随意使用一个值作为一个标志,来进行控制输入的行数.(在 ...

  8. Pycharm:调试、断点

    1.调试:Shift+F10 或 2.快捷键: 步进:F8 进入函数内:F7 运行到下一个断点处:F9 3.删除所有断点 菜单栏->Run->View BreakPoints.. 减号代表 ...

  9. VSCode空格变成虚点

    "editor.renderWhitespace": "all",

  10. python初略复习(2)及python相关数据分析模块的介绍

    常用模块 Python中的模块在使用的时候统一都是采用的句点符(.) # 就是模块名点方法的形式 import time time.time() import datetime datetime.da ...