0

我在 hbase 中有一个表,其行 id 的长度为 25 个字符。我观察到,如果行 id 长度更短(大约 10),那么 reduce 阶段的运行速度会比行 id 为 25 个字符的快一点。所以我想到了用这个 25 个字符的 String 的 hashcode 作为 row id。可以使用生成的hascode作为hbase表中的row id吗?

需要注意的是,String.hashcode() 返回一个整数(10 亿),我的表记录数在 2 亿左右。

4

2 回答 2

2

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

于 2013-05-09T12:14:34.227 回答
0

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

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

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

于 2014-11-04T10:14:19.383 回答