数据分库分表

数据库里数据越来越多会导致的现象

  • 第一,资源报警。#card

    • 单机数据库的连接数、IO 和网络吞吐都是有限的,并发量上来之后,数据 库就顶不住了。
  • 第二,查询变慢。#card

    • 一张表里的数据越来越多,B+树高度变大,访问一次就要 更多的 I/O,性能就下降了。
  • 第三,热点集中。#card

    • 比如活动期间,某些表或者某些区间会被频繁 访问,结果整个数据库都被拖慢。

分库分表的目的其实就是

  • 分 库 :-> 解决单机承载能力有限的问题,把请求分散到多台服务器上。

  • 分表 :-> 解决单表数据量过大 的问题,把数据拆开,让查询在更小的范围内完成。
    方案

  • 水平分表

    • 定义 :-> 将同一张表的数据按行划分, 分散 到多个表中,降低单表数据量
    • 场景 :-> 电 商 订 单 表 orders 太 大 , 按 订 单 ID 取 模 拆 成 orders_0、orders_1、orders_2
  • 垂直分表

    • 定义 :-> 将一张表的不同列拆分到多个表 中,减少字段数量,提高查询效率
    • 场景 :-> 商品表 product, 基本信息放到 product_base, 大字 段(描述、图片 URL)放到 product_detail
  • 水平分库

    • 定义 :-> 将将相同表结构的数据分布到多个数 据库实例中,分摊读写压力
    • 场景 :-> 社 交 应 用 的 消 息 表 message , 按 用 户 ID 拆 到 message_db1、message_db2,两个库里都有 message 表
  • 垂直分库

    • 定义 :-> 将将不同业务的数据分散到不同数据 库实例中,按功能模块拆分
    • 场景 :-> 在线教育平台:用户数据放 user_db, 课程数据放 course_db,支付数据放 payment_db

分库分表和分片分区的区别 #card

  • 分库分表是一种物理实现方式,分片是抽象概念。

  • 你可以 说“我的系统做了分片”,而实现手段就是“分库+分表”。

作者

Ryen Xiang

发布于

2026-01-31

更新于

2025-10-23

许可协议


网络回响

评论