Mycat核心概念

_

这张图展示的是典型的数据库中间件分片架构(常见于 MyCat 等系统),它清晰地描绘了数据从“逻辑概念”到“物理存储”的完整映射过程。

你可以把这个流程看作是一个快递分拣系统,以下是各个组件的具体含义和它们之间的关系:

1. 核心组件解析

逻辑库与逻辑表 (左侧)

  • 含义:这是给应用程序(程序员)看到的“假象”。

  • 解释:对应用来说,就像在操作一个普通的单机数据库,里面有一张巨大的 User 表。但实际上,这张表的数据已经被切分到了不同的地方。

DataNode (数据节点 - 中间列)

  • 含义:逻辑表的具体分片。

  • 解释DataNode-1DataNode-2 等就像是具体的“包裹”。比如,User 表根据规则被切分了:

    • DataNode-1 可能存的是用户 ID 1-1000 的数据。

    • DataNode-2 可能存的是用户 ID 1001-2000 的数据。

  • 本质:它是逻辑表物理数据库之间的映射纽带。

DataHost (数据宿主 - 右侧第二列,红圈处)

  • 含义:定义了数据库实例的物理位置及读写规则。

  • 解释:它代表了物理数据库服务器的抽象层。它通常包含:

    • 连接信息:IP 地址、端口、账号密码。

    • 读写分离配置:一个 DataHost 可以对应一个写库(Master)和多个读库(Slave)。

  • 红圈标注的意义:这里强调的是“物理实例”这一层。它告诉系统:“DataNode-1 的数据实际是存放在 DataHost-1 这个服务器集群里的”。

MySQL (物理库 - 最右侧)

  • 含义:真实存储数据的物理数据库。

  • 解释:这是数据最终落地的地方。

    • MySQL-1 对应 DataHost-1

    • MySQL-2 对应 DataHost-2

    • MySQL-3 对应 DataHost-3


2. 数据流转逻辑 (从左到右)

整个流程可以这样理解:

  1. 应用发起请求:程序向逻辑库发送 SQL,例如 SELECT * FROM User WHERE id = 10;

  2. 中间件解析:中间件(如 MyCat)接收到 SQL,分析出这条数据属于哪个分片。

  3. 定位 DataNode:假设规则是取模分片,id=10 落在了**DataNode-1**。

  4. 寻找 DataHost:系统查找配置,发现 DataNode-1 绑定在**DataHost-1** 上。

  5. 路由到物理库DataHost-1 告诉系统真实的 IP 和端口,最终 SQL 被转发到**MySQL-1** 执行。

  6. 返回结果MySQL-1 查出结果,原路返回给应用。

3. 总结:为什么要有 DataHost?

你可能会问,为什么不直接让 DataNodeMySQL

引入 DataHost 这一层主要是为了解耦管理读写分离

  • 解耦:如果物理数据库迁移了 IP,只需要修改 DataHost 的配置,不需要改动 DataNode 的分片规则。

  • 读写分离DataHost 内部可以配置一主多从。写操作发给 MySQL-1 (Master),读操作自动发给 MySQL-1 的从库 (Slave),这对 DataNode 来说是透明的。

一句话总结: 这张图描述了一个 SQL 请求如何从“逻辑上的单表”被拆解,经过“分片节点”,通过“宿主定义”,最终到达“真实的物理数据库”的全过程。

redis企业级实战 2026-03-31
Object::isNull踩坑 2026-04-23

评论区