【发布时间】:2015-12-18 09:47:48
【问题描述】:
我阅读了有关加盐以及在顺序键的情况下如何将其用于负载平衡的信息。基本上,salt 应该将连续的行分配给不同的区域服务器。
我还阅读了这个article,它解释了如何在加盐的表上运行 MR 作业。
因此,建议生成盐为:
StringUtils.leftPad(Integer.toString(Math.abs(keyCore.hashCode() % numberOfRegions)), 3, "0") + "|" + logicalKey
所以你基本上取原始密钥的哈希并进行模除以获得盐。
您还需要指定基于盐的预分割,以便每个区域都包含具有相同盐的行。
所有这些似乎都是合理的。我的问题是,当您添加更多区域服务器时会发生什么?
预计您还会增加区域数量,因此您必须更改拆分策略,以便新区域遵循“区域内的所有行一个盐”规则。您还需要通过增加的 numberOfRegions 执行模除法。
所有这一切意味着当我尝试获取在区域数量较少时添加的行时,我可能会搞砸查询。例如,一开始您可以除以模 10(10 个区域),然后您将除以模 50(现在是 50 个区域)。
谁能解释一下这个加盐/预分裂的完整过程吗?
【问题讨论】: