一、mycat介绍
目录
二、mycat原理
三、mycat介绍
四、什么是分库分表
五、分片介绍
5.1垂直切片
5.2水平切片
六、配置文件
七、 关键特性
八、安装
一、背景
随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。
当用户表达到千万级别,在做很多操作的时候都会很吃力,所以当数据增长到1000万以上就需要分库分表来缓解单库(表)的压力。
二、mycat原理
可以用拦截形容,它拦截了用户发送过来的SQL语句,首先对sql语句做了一些特定的分析,如分片分析,路由分析,读写分析,读写分离分析,缓存分析等,然后将此sql发送后端的真是数据库,并将反馈的结果做适当的处理,最终返回给用户。
三、mycat介绍
• 一个用于MySQL读写分离和与数据切分的高可用中间件
• 一个模拟为MySQLServer的超级数据库代理
• 一个能平滑扩展支持1000亿大表的分布式数据库系统 (普通单表1kw以下)
• 一个可管控多种关系数据库的数据库路由器
• 一个彻底开源的,面向企业应用开发的大数据库集群
• 支持事务、ACID、可以替代MySQL的加强版数据库
• 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
• 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
• 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
• 一个新颖的数据库中间件产品
四、什么是分库分表
分表:就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。
分库:一旦分表,一个库中的表会越来越多
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。
垂直:一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;
水平:另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数
据的水平(横向)切分。
特点:
垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。
水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。
五、拆分介绍
垂直拆分:将不同的表切分到不同的数据库中 水平拆分: 将同一类型表按照分片条件切分到不同的数据库中(常用)
数据库的垂直拆分:
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。
比如:一个数据库里面既存在用户数据,又存在订单数据,那么垂直拆分可以把用户数据放入到用户库,把订单数据放到订单库。
如下图:

数据库的水平拆分:
水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。
我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的数据行拆分成多个数据库(或其他数据库),如图:


表的垂直拆分:
垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。
比如一张订单表里面有用户数据,也有订单数据。那么把这张表拆分为用户表和订单表,通过主外键建立联系。其实就是按数据种类拆分表。
表的水平拆分:
通常情况下,我们使用取模的方式来进行表的拆分; 将数据量大的表,拆分为相同的小表来分担数据。
比如一张有400W的用户表users,为提高其查询效率我们把其分成4张表users1,users2,users3,users4,通过用ID取模的方法把数据分散到四张表内Id%4+1 = [1,2,3,4]
注意,进行水平拆分后的表,字段的列和类型和原表应该是相同的,但是要记得去掉auto_increment自增长
垂直:将不同的表切分到不同的数据库中
水平:将同一类型表按照分片条件切分到不同的数据库中(常用)
六、配置文件
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
知道的越多,不会的越多!
参考:https://www.cnblogs.com/shaolixin/p/11484023.html

浙公网安备 33010602011771号