✅分库分表中,如何预估需要分多少个库?多少张表?

典型回答

分成多少,一般是一般是结合订单存量数据,以及增量数据的情况来看要分多少张表。你要知道你存量已经有多少数据量了,以及一年大概增长多少,还要知道业务上希望你的数据保留多久。

我给一个公式(如有雷同,纯属抄袭):

<font style="background-color:#FBDE28;">分表数量= (订单存量总数 + 预计年增长量 * 保留年限)/2000万 => 向上取最接近的2的幂</font>

以上公式中的2000万,是Innodb 理论上的单表极限(这里的极限指的是性能不变差的极限)。

✅从B+树的角度分析为什么单表2000万要考虑分表??

假设存量数据已经有2000万了,预计每年增长500万,我们需要保留10年,那么就得出:

(2000 + 500 * 10) / 2000 = 3.5 => 4

这里为什么计算出的结果要向上取最接近2的幂呢?

因为这样可以更容易基于分表数量计算分库的数量,以及后期数据迁移的时候更加方便。

✅分库分表的数量为什么一般选择2的幂?

所以,在做分库分表的时候,可以根据这个公式,大致计算一下需要分多少张表,然后再根据并发的情况,大致算一下需要分多少个库。

库的数量和表的数量之间没有必然联系,但是需要有倍数关系,如果你实在是不太好根据并发去预估库的数量,那么我给你个经验值的公式(如有雷同,纯属抄袭):

<font style="background-color:#FBDE28;">分库数量 = 分表数量 / 8</font>

比如我们常用的分库分表数量:

128库,1024张表

64库,512张表

16库,128张表

8库,64张表

当然,如果你分表数量本身是小于8的,那要么是2,要么是4,那么我建议你就直接分库数量=分表数量即可。

原文: https://www.yuque.com/hollis666/xkm7k3/uhl4wm5gsv9717z7