2013-05-08 24 views
0

我在hbase中有一个表,其行ID是长度为25个字符。我观察到,如果行ID长度较少(大约10),那么缩小阶段的运行速度要比具有25个字符的行ID快一点。所以我想使用这个25个字符的字符串的哈希码作为行ID。可以使用生成的hascode作为hbase表中的行ID吗?可以使用字符串的hashcode作为hbase中的行ID吗?

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

回答

2

尽管Hbase并没有阻止你这么做,但我认为这不是一个明智的决定。可能会导致hahcode碰撞,导致插入不正确。在这种情况下,2个不同的记录将会作为不同的版本进入同一行。

+0

行ID的长度是否影响MR(批量加载或任何其他记录式任务)性能是否正确? – RGC 2013-05-09 13:22:31

+0

是的。 Rowkey长度非常重要。不只是将数据放入Hbase,而是用于将数据提取回来。 – Tariq 2013-05-09 13:25:00

0

Java中的hashcode()函数消耗实例数据以生成32位整数。 但是大部分类都会覆盖此函数以基于其类结构提供更好的传播。

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

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

相关问题