MyCat概述

发布于 2022-07-20  2.6k 次阅读


一,MyCat的作用

MyCat的三大作用:

  1. 读写分离
  2. 数据分片
  3. 多数据源整合

1,读写分离

将数据库的写请求和读请求进行分离,交与不同的数据库进行处理,针对性的减少数据库压力

2,数据分片

  • 垂直拆分:按照不同的业务或服务将功能进行,按列进行拆分(将不同的表进行拆分)
  • 水平拆分:相同的服务或业务进行拆分,按行进行拆分(将同一张表进行拆分)

3,多数据源整合

MyCat可以有多种数据源:

  • 单个或多个数据库
  • 非关系型数据库
  • 关键表
  • ……

二,MyCat的原理

   MyCat最主要的原理就是"拦截",它拦截了用户发送过来的SQL语句,首先对SQL语句进行特定分析:如分片分析、路由分析、读写分离分析、缓存分析等。然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终返回给用户

三,MyCat的核心概念

MyCat有五大核心概念:

  • 逻辑库(Schema)
  • 逻辑表(Table)
  • 分片节点(dataNode)
  • 节点主机(dataHost)
  • 分片规则(rule)

1,逻辑库(Schema)

   MyCat是一个数据库中间件,通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库

2,逻辑表(Table)

  分布式数据库中,对应用来说,读写数据的表就是逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成

逻辑表分类:

  1. 分片表
  2. 非分片表
  3. ER表
  4. 全局表

①分片表

  指哪些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据,如:电商的订单表,用户表等按照一定规则切分到多个节点上

② 非分片表

  一个数据库并不是所有表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是哪些不需要进行数据切分的表,如:国家表,语言表等可以存储在一个节点中

③ ER表

    关系型数据库是基于实体关系模型(Entity Eelarionship Model)的,MyCat中的ER表便来源于此。MyCat提出了基于ER关系的数据分片策略,字段的记录与其所关联的记录存放在同一个数据分片中,通过表分组(Table Group)保证数据关联查询不会跨库操作

④ 全局表

  在大型项目中,会存在一部分字典表(码表),在其中存储的是项目中的一些基础的数据,而这些基础的数据数据量不大,但在各个业务表中可能都存在关联。当业务表由于数据量大而分片后,业务表与附属的数据字典之间的关联查询就变成了比较棘手的问题,在mycat中可以通过数据冗余来解决这类表的关联查询,即所有分片都复制一份数据(数据字典表),因此可以把这些冗余的数据定义为全局表

3,分片节点(dataNode)

数据切分后,一个大表被分到不同的分片数据库中,每个表分片所在的数据库就是分片节点(DataNode)

4,节点主机(dataHost)

    数据分片后,每个分片节点(dataNode)不一定都会独占一台机器,同一个机器上面可以有多个分片数据库,这样一个或多个分片节点所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点均衡的放在不同的节点主机上

5,分片规则(rule)

    前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片就是分片规则。数据切分选择合适的分片规则非常重要,它将极大的避免后续数据的处理难度


路漫漫其修远兮,吾将上下而求索