伪MySQL面试宝典(二)

版权声明:本文为原创文章,转载请标明出处。 https://blog.csdn.net/zwjzqqb/article/details/82835825

MyCAT简单介绍:

所有前端的数据库连接都会接入到mycat中,mycat识别会话中的读或者写的请求,分发到mycat配置的后端数据库中

mycat后端是一个主备集群,mycat不负责数据同步,只负责读写分析和大表分片的规则和路由

mycat核心配置文件有三个:
  server.xml配置mycat自我相关的参数
  schema.xml配置mysql数据库,写操作的数据源和读操作的数据源
  rule.xml  配置Mycat分片规则

schema.xml简单分析:
  dataHost定义mycat连接的mysql实例,并且区分定义读的节点和写的节点,实现读写分离
  dataNode对这些实例进一步关联,完成分库
  如dataNode1是实例1的第一个库,dataNode2是实例2的第一个库
  table标签使用dataNode1或者dataNode2或者两者皆有,也就实现了表访问的水平切分,完成分库
  table标签使用rule规则,实现多个dataNode之间的访问策略

rule.xml  简单分析:
  一个table标签可以使用多个dataNode,那么这些dataNode之间的负载怎么切分
  就是rule.xml实现的功能了,它是有分片字段和分片函数组成的
  分片字段是选取的表中的用于分片的字段,如需要根据省份进行分片,那么分片字段就是省份
  分片函数则是对分片字段进行处理的可用函数
  如hash-int,计算分片字段的hash值,然后根据配置分片值和dataNode映射关系来路由

简单总结:
mycat使用schema.xml定义逻辑库和逻辑表,和多个物理mysql库、表之间进行映射
  使用schema中的dataHost定义writeHost和readHost实现读写分离
  使用dataNode关联dataHost,进一步使用table关联一个或多个dataNode,实现表的分片
  这种分片方式是表的水平分片,当一个逻辑表存在多个物理分片时,该映射的路由规则由rule来定义
  rule由分片字段和分片函数组成,分片函数主要有连续分片和离散分片两类分片函数
  分别相当于oracle的range分区表和hash分区表,当然也可以连续+离散的组合分片
  这些规则定义在rule.xml中

mycat使用心跳检测heartbeat来确定连接的多个mysql实例的可用性,心跳检测主要有
  select user()和show slave status两种方法

mycat默认端口是8066,web连接mycat像直接连接mysql库一样,只需要改端口即可
  原连接串 jdbc:mysql://192.168.1.110:3306/
  使用mycat的连接串 jdbc:mysql://192.168.1.100:8066/
  原连接串 mysql -uxx -pxx -P3306
  使用mycat的连接串 mysql -uxx -pxx -P8066
  连接后能够使用的库和表即是schema.xml中配置的逻辑库和逻辑表
  而在server.xml中定义了mycat的连接逻辑用户名和密码,以及对应的逻辑库和逻辑表

表分片有两种:水平分片和垂直分片,垂直和水平是对于表结构来说的
  垂直分片:将表的列切分开,分片后每一片都具有表全部的记录数和部分的列,列式数据库的分表
  水平分片:将表的记录按一定规则切分开,分片后每一片只有该表的部分记录,相当于分区表
    水平分片有同库内的分表和多个库之间的分库:
      分表:表的分区处于同一个库内,和分区表极其相似,小众的,无法拆分对表访问的主机负载
      分库:表的分区处于不同库内,大众分片方法,可以拆分对表访问的负载

mycat的E-R分片,这里的E-R是指实体-联系,优化具有父子表关系的两表分片问题
  对父表进行分片,对父表相关联的子表的对应记录
  在该记录插入之时就会自动路由到它的父表记录所在的dataNode上
  这样关联查询时,就不会产生子表和父表跨分片的情况
  建议子表外键关联父表分片键,这样路由时无需查库,这样就需要父表分片键是父表的主键了

mycat全局表,一条insert语句会同步插入到全局表的各个dataNode上
使各个dataNode上的全局表数据一致,这个时候如果有跨分片join的情况就可完美解决
比如父表是特别小的表,子表做了分片,那么父表可以做成全局表

mycat分片规则:连续分片和离散分片
  连续分片:相当于oracle的range分区,是范围分片,主要是对时间类、数字类分片
  离散分片:相当于oracle的hash分区,是hash分片,如枚举分片、取模分片、hash分片
  二次分片:相当于oracle的组合分区,先范围分片,每个范围分片进行hash分片

Mycat eye可以监控mycat

现在的mycat问题颇多,建议调研proxy sql或者网易开源的cetus
如果要使用mycat,需要公司二次开发支持,解决BUG,进一步定制功能

[TOC]

猜你喜欢

转载自blog.csdn.net/zwjzqqb/article/details/82835825
今日推荐