0

我有很多 url 作为 HBase 表中的键。由于它们“全部”以 开头http://,因此 Hbase 将它们放在同一个节点中。因此,我以 +100% 的节点和另一个空闲的节点结束。

所以,我需要将 url 映射到类似哈希但可逆的东西。在 JAVA8 中是否有任何简单、标准和快速的方法来做到这一点。

我寻找前缀的随机(线性)分布。

笔记:

  • 反转 url 并不有趣,因为很多 url 都/ ? =以不平衡分布的风险结尾。

  • 我不需要加密,但我可以接受。

  • 我不寻找压缩,但如果可能的话,它是受欢迎的:)

谢谢,科斯汀

4

2 回答 2

3

没有单一的标准方法。

您可以做的一件事是在密钥前面加上其哈希值。就像是:

a01cc0fe http://...

这很容易可逆(只需剪掉哈希字符,您可以将其设为固定长度),并且会为您提供良好的分布。

字符串的哈希码在 JVM 中是稳定且一致的。计算它的算法在String.hashCode的文档中指定,因此您可以将其视为 String 工作方式的合同的一部分。

于 2016-01-14T15:34:29.403 回答
1

添加 36 位十进制数 [0-9a-z] 编码的哈希码前缀。

public static String encode(String s) {
    return Integer.toString(s.hashCode() & 0xffffff, 36) + "#" + s;
}

public static String decode(String s) {
    return s.replaceFirst("^[^#]*#", "");
}

样本:

http://google.com/  <-> 5o07l#http://google.com/
于 2016-01-14T16:29:35.113 回答