String的哈希码是否可以用作hbase中的行ID?

时间:2013-05-08 12:24:39

标签: hbase

我在hbase中有一个表,其行ID长度为25个字符。我观察到如果行id长度较小(大约10),则reduce阶段的运行速度比行ID为25个字符要快一些。所以我想到使用这个25个字符的String的哈希码作为行id。是否可以将生成的hascode用作hbase表中的行id?

需要注意的是,String.hashcode()返回一个整数(1000万),我的表记录数约为2亿。

2 个答案:

答案 0 :(得分:2)

尽管Hbase并没有阻止你这样做,但我认为这不是一个明智的决定。可能存在hahcode冲突,这将导致不正确的插入。在这种情况下,2个不同的记录将与不同的版本位于同一行。

答案 1 :(得分:0)

Java中的

hashcode()函数使用实例数据来生成32位整数。 但是大多数Classes都会覆盖这个函数,以便根据类结构提供更好的传播。

  

从Java 1.2开始,java.lang.String类在字符串的整个文本上使用乘积和算法实现其hashCode()。

但是使用这种方法,你总是有可能发生碰撞,这在行索引的情况下是非常有害的,因此应该避免。