我想将最大长度为15的字符串转换为唯一的长数字。我试图使用BigInteger的longValue()函数。
BigInteger bigInt = new BigInteger("abcdeabcdeabcda".getBytes());
long n = bigInt.longValue();
- 我们可以避免冲突的长值,直到15个字符的字符串?
- 字符串可以包含字母、数字和特殊字符。
- 不把字符串加密到太长。但是为了提高hive查询计数的性能。
- 我们注意到,如果使用long代替string, hive中的count(distinct)提供了良好的性能。 我们不需要近似。或者概率计数不同。我们需要精确的计数。
Thanks in Advance
不行,至少不会发生碰撞。
ASCII是每个字符7位和15 * 7 = 105
位-你不能把它放入一个长。
你建议你可能不需要完整的ASCII -也许是基数64,这是6位,但15 * 6 = 90
,仍然太长了。
即使大小写无关,你可以不使用四个字母,使用32进制,你仍然有15 * 5 = 75
,这对于64位数字来说仍然太错误了。
你需要接受会有碰撞,但也许有办法减少它们。如何生成这些15个字符的字符串?有什么模式可以借鉴吗?
@Athanor指出的问题的选择答案有一个好主意-使用两个长。2 * 64 = 128
。使用7位ASCII的潜在105
位数字可以很好地适合两个长字符。