看看切分技术,基本上有基于哈希或基于范围的版本。基于哈希的是更随机的,基于范围的是更基于启发式的.假设您最初有两个碎片(单独的数据库实例),那么您就会超过它,并且需要3个碎片。你做什么,现在你的杂凑东西不能再工作了,你基本上需要重新计算每条记录的位置(比如说有100亿条记录)。而且范围分割也不会传输,你必须给新的碎片更多的权重,但这也不是很理想,所以在这种情况下,你也必须重新计算记录位置。
我想得对吗?那么,按照你目前的增长速度,你最好多加2个碎片,总共增加5个,然后再多增加3个,总共增加8个。每次你都得重新分配所有的记录,对吗?
如果是的话,当你需要做这个调整的时候,在实践中会发生什么?我从来没有处理过需要如此复杂程度的数据库。在此期间数据库可用吗?您如何将记录传送到新的切分方案,同时允许您的数据库被读取和写入?
发布于 2022-01-23 16:02:44
一种独立于您所使用的切分规则的方法是:在重新分配期间使用双重检查。
添加新节点后,开始重新分配,每次一个节点。节点应该遍历其所有元素并应用新的切分规则。一些元素将被移动到其他碎片中,一些元素将保留下来。在所有节点重新编码之前,当收到请求时,系统应该进行双重检查:首先根据新的分片规则确定节点并将请求发送给它。如果不成功,请根据旧的分片规则确定节点并向其发送请求。
优势:
缺点:
https://softwareengineering.stackexchange.com/questions/436190
复制相似问题