前置知识: MySQL

分库分表中间件

00:00
1 min Advanced 2026/6/14

MySQL分库分表中间件:ShardingSphere、Vitess、MyCat的架构、分片策略与适用场景

1. 分库分表概述

表数据量超过千万级,性能瓶颈时,需要分

1.1 拆分策略

策略说明适用场景
垂直分按业务拆分到不同数据库微服务架构
垂直分将大拆分为张小列数过
水平分同一数据分布到数据库数据量大的
水平分同一中将拆分为数据量大的

2. 分片键设计

-- 分片键选择原则:
-- 1. 高选择性(避免数据倾斜)
-- 2. 查询高频使用
-- 3. 尽量避免跨分片查询

-- 常见分片策略:
-- user_id % 4 → 4个分片
-- HASH(order_id) → 均匀分布
-- RANGE(created_at) → 按时间分片

3. ShardingSphere

3.1 架构

ShardingSphere-JDBC:轻量级Java框架,应用内嵌入
ShardingSphere-Proxy:独立代理服务
ShardingSphere-Sidecar:云原生方案

3.2 分片配置

rules:
  - !SHARDING
    tables:
      orders:
        actualDataNodes: ds_${0..3}.orders_${0..7}
        tableStrategy:
          standard:
            shardingColumn: user_id
            shardingAlgorithmName: orders_mod
        keyGenerateStrategy:
          column: id
            keyGeneratorName: snowflake
    shardingAlgorithms:
      orders_mod:
        type: MOD
        props:
          sharding-count: 8

4. Vitess

-- Vitess:YouTube 开源的 MySQL 集群管理工具
-- 基于 VReplication 实现分片迁移
-- 支持在线分片拆分和合并

-- 创建分片
vtctlclient CreateShard -keyspace commerce -shard '-'
vtctlclient CreateShard -keyspace commerce -shard '-80'
vtctlclient CreateShard -keyspace commerce -shard '80-'

5. 跨分片查询

-- 尽量避免跨分片 JOIN 和聚合
-- 使用冗余字段减少跨分片查询
-- 使用全局表(广播表)存储维度数据
-- 使用 ER 分片将关联表放在同一分片

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式