2024-08-04
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1642999982

回答

在我们分库分表时,我们首先需要确认我们要划分为多少个库,每个库多少张表,这个时候我们一般都是建议使用 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 ,那么在扩容时有很明显的优势。

  • 简单扩容