大家好,我是七淅(xī)。
如标题所说,本文会结合我自己的亲身经历,介绍 3 部分内容:
- 线上单库单表变更到多库多表的各个实现方案
- 方案优劣对比
- 对于历史存在的单表,并且它们不需要变成多表,需要怎么处理
先下个结论,没有百分百完美的方案,技术方案永远要结合产品业务来设计。
以下举例的方案也只是较为通用的做法,具体细节是可以根据业务场景进行变化调整的。
只要能够满足业务需求,就是好方案,不要为了秀技术而忽略业务。
看完这篇文章,如果后面有人问你,关于变更到多库多表的方案问题,那你可以和他谈笑风生了。
好了,下面我说下我这边的业务背景,和大家解释清楚为什么需要多库多表。后面会引申出方案的,莫急。
1. 业务背景
有一个在线上运行着的数据库,假设是 user 库,库中只有 1 张单表。
现在有个新需求,该需求的功能有一定的请求量和数据量。
其中数据量初期是百万级,考虑到业务增加,增长到千万、上亿都是有可能的。所以从数据量上看,单库单表不合适。
Q1:如果只是数据量问题,那用单库多表行不行?
A1:行。
Q2:那为什么还用多库多表呢?
A2:因为一个数据库的连接数量是有限的,怕翻车。