数据分库分表
数据库里数据越来越多会导致的现象
第一,资源报警。#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
分库分表是一种物理实现方式,分片是抽象概念。
你可以 说“我的系统做了分片”,而实现手段就是“分库+分表”。