沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 基础

  • Mysql

    • MySQL基础小结
    • 索引篇
    • 讲讲回表查询
    • 讲讲索引失效问题
    • 思维导图
    • 数据库优化
    • 临时表
    • 聊聊分库分表
      • 如何分库或分表?
      • 图解理解
      • 每种方式的目的和适用场景
        • 1. 垂直分库
        • 2. 水平分库
        • 3. 垂直分表
        • 4. 水平分表
      • 总结对比表
      • 最佳实践建议
      • 学习参考
    • 实战篇

    • 读高性能MySQL笔记

  • Redis

  • 达梦数据库

  • 数据库
  • Mysql
沉梦听雨
2025-05-23
目录

聊聊分库分表

# 聊聊分库分表

# 如何分库或分表?

类型 拆的是什么 拆的方式 举例
✅ 垂直分库 按“业务模块”拆库 不同模块放不同库 用户库、订单库、日志库
✅ 水平分库 按“数据量”拆库 相同结构,分布到多个库 用户数据分到 user_db_0, user_db_1
✅ 垂直分表 按“表结构”拆表 一张大表拆成多个小表 用户表拆成:user_base + user_login
✅ 水平分表 按“数据量”拆表 同结构,数据按规则分布 order_0, order_1, ..., order_15

# 图解理解

垂直分库:                     水平分库:

[原始DB]                      [原始DB]
 ├─ user                     ├─ user (1亿)
 ├─ order                   => 拆成
 ├─ product                  ├─ user_0 (0~5000万)
 ↓                           └─ user_1 (5000万~1亿)

拆成:
[user_db] → user             [user_db_0] → user
[order_db] → order           [user_db_1] → user
垂直分表:                  水平分表:

[User]                      [Order] (10亿)
 ├─ id                     =>
 ├─ name                    ├─ order_0
 ├─ email                   ├─ order_1
 ├─ password                ...
 ↓
拆成:
[user_base] → id, name, email
[user_login] → user_id, password
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 每种方式的目的和适用场景

# 1. 垂直分库

场景 内容
拆分维度 业务模块或功能模块
目的 解耦、减轻数据库压力、方便运维
举例 用户模块放 user_db,订单模块放 order_db,日志模块放 log_db

👉 适合中台系统、模块化微服务架构,让各模块独立开发、部署、扩展。

# 2. 水平分库

场景 数据量非常大,单库压力大
拆分维度 相同结构的表,按规则拆到多个库中
举例 user 表有 2 亿数据 → 分到 4 个库,每库 5000 万

👉 通常结合分表一起使用(水平分库 + 水平分表)。

# 3. 垂直分表

场景 表字段太多、部分字段访问频率极低
拆分方式 把冷字段拆出去,按字段功能分类
举例 用户表拆成 user_profile、user_login、user_settings 表

👉 适用于做冷热分离、读写优化、字段稀疏的场景。

# 4. 水平分表

场景 单表数据量太大(>千万),查询慢
拆分方式 按 ID、时间、用户ID 等维度将一张大表拆为多个小表
举例 order 表按月份分成 order_202401 ~ order_202412

👉 最常见的拆分方式,适用于订单、日志、告警、交易流水等海量数据表。

# 总结对比表

类型 拆分维度 目标 难度 常见场景
垂直分库 按模块 解耦+并发 中等 用户、订单分库
水平分库 按数据 扩展性 高 超大用户/订单表
垂直分表 按字段 热冷分离 低 用户信息表
水平分表 按数据 降低单表压力 中等 日志、订单、记录表

# 最佳实践建议

  1. 优先做垂直分库:随着业务模块增加,自然会拆出多个模块库。
  2. 热点大表做水平分表:例如订单、日志等,千万级时开始规划。
  3. 使用 ShardingSphere 等中间件:简化路由、分库分表维护。
  4. 统一 ID 生成器:所有分库分表都需要全局唯一 ID(如雪花算法)。

# 学习参考

  • 读写分离和分库分表详解 | JavaGuide (opens new window)
上次更新: 2025/5/23 19:28:34
临时表
日常小记

← 临时表 日常小记→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式