所有的应用都可以归结为两种操作的集合:读 和 写 。
随着数据量的增加,单台机器的能力是有限的。一方面,机器的容量会无法容纳数据,另一方面数据的读取速度会变慢。
所以我们可以将数据分片,分到多台机器上,这样的话存储压力和读取速度就变快了。
上述是数据分片的好处,但也带来的挑战:
对主键或者其他字段进行hash,然后hash%n,n是机器的个数,取模的结果作为数据存储的机器
好处: 数据分布均匀
坏处: 扩展机器的时候,搬运的数据太多。
为了改善哈希导致的数据搬运问题,引入了一致性hash。
一致性hash的做法:
1、将机器的ip或者其他信息来作为hash的字段,将hash%2^32-1,作为机器的位置
2、对数据的主键或者其他字段进行hash,也hash%2^32-1。数据存放的位置是哈希结果顺时针的第一个节点。
好处: 数据搬运变少,当增加或者减少机器的时候,只与其顺时针的下一台机器有关。
坏处: 如下图所示,数据不均匀,大部分数据都落到了机器A上。如果A机器要去除,所有的数据都会转移到B上,大量的数据会导致B的宕机。
对于一台机器,加入多个虚拟节点,虚拟节点指向同一台物理机器。
好处:
1、数据的分布就均匀了
2、可以根据虚拟节点的个数来调整机器的权重。如果一个机器的配置比较好,就可以为其分配更多的虚拟节点,让其存储更多的数据
当删除一台机器的时候,该台机器的数据会被转移到多台机器上。
按照时间、id等字段的范围来分片。
好处:
查询比较方便,因为可以清楚的知道机器中存储的数据的范围
坏处:
1、数据分布有可能不均匀
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_40276626/article/details/123024356
内容来源于网络,如有侵权,请联系作者删除!