回答
在我们分库分表时,我们首先需要确认我们要划分为多少个库,每个库多少张表,这个时候我们一般都是建议使用 2^N
,也就是 2、4、8、18、32 这样的数据。这样做有什么好处呢?
一、哈希算法的优化
如果我们的分库分表策略采用的是 Hash 取模策略时,若分片的数量是 2^N
,则哈希值对分片数量取模的计算可以通过简单的位与运算来完成。例如,假设分片数量是8(即2^3
),要计算哈希值H对8取模,可以用位与运算 H & (8-1)
来替代 H % 8
。位与运算(&
)比取模运算(%
)更高效,因为它直接操作二进制位而无需进行除法计算。
二、数据分布更加均匀
在分裤时,如果我们库、表的分片数量都是 2^N
,例如 8 库 64 表,这样我们就可以将 64 张表均匀分布到 8 个库中,每个库 8 张表。同时,在加上数据的分片策略采取 Hash 取模策略,这样就会使得数据可以更加均匀地分布到各个分片中。
三、更利于扩容
当我们在做分库分表时,肯定要考虑未来需要进行二次拆分的情况,因为你不可能一次性就能判断未来的发展。而在进行二次拆分时,我们需要对系统的影响尽可能地减少,如果我们将分库分表的分片定义为 2^N
,那么在扩容时有很明显的优势。
- 简单扩容