分成多少,一般是一般是结合订单存量数据,以及增量数据的情况来看要分多少张表。你要知道你存量已经有多少数据量了,以及一年大概增长多少,还要知道业务上希望你的数据保留多久。
我给一个公式(如有雷同,纯属抄袭):
<font style="background-color:#FBDE28;">分表数量= (订单存量总数 + 预计年增长量 * 保留年限)/2000万 => 向上取最接近的2的幂</font>
以上公式中的2000万,是Innodb 理论上的单表极限(这里的极限指的是性能不变差的极限)。
假设存量数据已经有2000万了,预计每年增长500万,我们需要保留10年,那么就得出:
(2000 + 500 * 10) / 2000 = 3.5 => 4
这里为什么计算出的结果要向上取最接近2的幂呢?
因为这样可以更容易基于分表数量计算分库的数量,以及后期数据迁移的时候更加方便。
所以,在做分库分表的时候,可以根据这个公式,大致计算一下需要分多少张表,然后再根据并发的情况,大致算一下需要分多少个库。
库的数量和表的数量之间没有必然联系,但是需要有倍数关系,如果你实在是不太好根据并发去预估库的数量,那么我给你个经验值的公式(如有雷同,纯属抄袭):
<font style="background-color:#FBDE28;">分库数量 = 分表数量 / 8</font>
比如我们常用的分库分表数量:
128库,1024张表
64库,512张表
16库,128张表
8库,64张表
当然,如果你分表数量本身是小于8的,那要么是2,要么是4,那么我建议你就直接分库数量=分表数量
即可。