我有很多url作为HBase表中的键。因为他们"所有"从http://
开始,Hbase将它们放在同一个节点中。因此,我以+ 100%的节点结束,另一个空闲。
所以,我需要将url映射到类似哈希的东西,但是可逆。在JAVA8中是否有任何简单,标准和快速的方法。
我寻找前缀的随机(线性)分布。
注意:
撤销网址并不感兴趣,因为很多网址都以/ ? =
结尾,并且有可能导致分配失衡。
我不需要加密,但我可以接受。
我不寻求压缩,但如果可能的话,欢迎使用:)
谢谢, 斯丁
答案 0 :(得分:3)
这不是一种标准的方式。
您可以做的一件事就是在密钥前加上哈希值。类似的东西:
a01cc0fe http://...
这很容易逆转(只需剪掉散列字符,你就可以制作一个固定的长度)并且可以很好地分发。
字符串的哈希码在JVM中是稳定且一致的。计算它的算法在String.hashCode
's documentation中指定,因此您可以将其视为String如何工作的合同的一部分。
答案 1 :(得分: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/