数据库分库分表海量商品存储优化实战指南
知识分享
2026-07-15 21:00
18 阅读
# 数据库分库分表海量商品存储优化实战指南
## 什么时候该考虑分库分表
当商品表单表数据超过 500 万行,或者磁盘 IO、连接数持续饱和时,**单一 MySQL 实例的读写能力就会成为瓶颈**。常见的现象是商品列表查询变慢、库存更新超时、后台导出卡死。此时就需要通过**分库分表(Sharding)**来将数据分散到多个数据库或表中,提升并发吞吐和存储上限。
> 核心思想:把一个大表“拆”成多个小表,分别存放在不同 MySQL 实例或同一个实例的不同库中,通过路由规则(如按商品 ID 哈希)决定数据落在哪里。
## 分库分表的核心策略与工具选型
### 两种拆分方式
- **垂直分库**:按业务模块拆分,例如将商品基本信息、库存、价格分别放到独立的数据库,降低单库压力。
- **水平分表**:将同一张商品表按某个字段(如 shop_id 或 goods_id)取模,分布到多张结构相同的表中。实际生产常将两者结合。
### 常用中间件对比
| 工具 | 特点 | 适用场景 |
|------|------|----------|
| MyCat | 基于代理层,对应用透明,配置相对简单 | 中小规模,团队偏运维 |
| ShardingSphere-JDBC | 应用内嵌,性能高,功能更细 | 微服务架构,Java 技术栈 |
| Vitess | 基于 Kubernetes,大规模云原生 | 日均亿级访问 |
对于新手站长,我推荐从 **MyCat** 入手,因为它不需要修改代码,只需在数据库层加一个代理即可体验分片效果。
## 以 MyCat 为例搭建分片环境(关键步骤)
### 1. 准备环境
- 两台以上 MySQL 实例(可用同一台机器不同端口模拟),分别创建数据库 `goods_db1` 和 `goods_db2`。
- 下载 MyCat 1.6 版本(`mycat-server-1.6.x`),解压到 `/usr/local/mycat`。
### 2. 配置分片规则
编辑 `conf/schema.xml`,定义逻辑库和分片表:
```xml