我在hbase中有一个表,其行ID长度为25个字符。我观察到如果行id长度较小(大约10),则reduce阶段的运行速度比行ID为25个字符要快一些。所以我想到使用这个25个字符的String的哈希码作为行id。是否可以将生成的hascode用作hbase表中的行id?
需要注意的是,String.hashcode()返回一个整数(1000万),我的表记录数约为2亿。
答案 0 :(得分:2)
尽管Hbase并没有阻止你这样做,但我认为这不是一个明智的决定。可能存在hahcode冲突,这将导致不正确的插入。在这种情况下,2个不同的记录将与不同的版本位于同一行。
答案 1 :(得分:0)
hashcode()函数使用实例数据来生成32位整数。 但是大多数Classes都会覆盖这个函数,以便根据类结构提供更好的传播。
从Java 1.2开始,java.lang.String类在字符串的整个文本上使用乘积和算法实现其hashCode()。
但是使用这种方法,你总是有可能发生碰撞,这在行索引的情况下是非常有害的,因此应该避免。