分库分表的策略,一致性hash算法 +虚拟节点机制 ,这种策略对比其他几种 更好,缺点最少。
为啥市面上我看到的基本还是在用hash取模的方式?还没看到采用一致性hash算法的。
一致性哈希算法和虚拟节点机制确实是一种常用的分库分表策略,它可以提供更好的负载均衡和动态扩容等优点,但是这种方式也存在一些缺点,比如:
1、实现复杂度高:相比较简单的hash取模算法,一致性哈希算法需要考虑节点的动态增减、虚拟节点的使用、数据倾斜等问题,实现起来相对复杂。
2、无法保证数据均匀分布:在实际应用中,一致性哈希算法也可能会出现数据倾斜的情况,尤其是在节点动态增减的情况下,需要进行一些调优。
3、可能会影响缓存命中率:由于一致性哈希算法中的数据分布是随机的,可能会导致某些数据分配到了不同的节点上,从而影响缓存的命中率。
相比之下,基于hash取模的分库分表策略实现简单,容易理解,应用广泛,但是也有明显的缺点,比如节点动态增减比较困难,数据分布不均匀等问题。
可能市面上使用hash取模的方式比较多,主要是由于其实现简单、稳定,容易部署和管理,并且在一些应用场景下,数据量不是很大,使用hash取模算法已经能够满足需求。不过,在需要进行大规模数据存储和访问的场景中,采用一致性哈希算法和虚拟节点机制更能够提供更好的负载均衡和动态扩容能力。