为什么HBase将值存储为字节数组而不是类型值(如String,Long等)

时间:2012-08-06 19:22:52

标签: java hadoop hbase

当我使用HBase时,我花了很多时间将字节数组转换为String或Long等类型。为什么HBase将值存储为字节数组而不是类型值?

2 个答案:

答案 0 :(得分:10)

我不认为“Hbase将所有内容存储为byte [],因为BigTable”实际上是一个令人满意的答案。我的2美分:

它允许我们毫不费力地存储任何类型的数据。例如,假设您必须将产品相关数据存储到您的hbase表中,例如ID,品牌,国家/地区,价格等。要存储这些参数中的每一个,您必须提前处理每个参数的各个数据类型。这肯定会增加一些开销。与RDBMS不同,hbase在创建表时不会要求所有这些。因此,即使这些参数的数据类型明天发生变化,或者您决定添加一些参数(使用一些新的数据类型),您所要做的就是将值包装在Bytes.ToBytes()中并将其推送到表中。所有这些都使插入更快。

此外,与以原始格式存储相同值相比,有时以序列化byte []形式存储值可节省几个字节。当你处理BigData时,这种轻微的节省变得非常重要。

长话短说,Hbase这样做是为了让事情变得更快,并使存储更有效率,将内部数据结构的开销保持在最低限度。

答案 1 :(得分:1)

HBase是一个Bigtable克隆,这就是Bigtable的作用。 Bigtable通常不存储像关系数据库这样的细粒度数据,它们存储序列化对象,通常是协议缓冲区。

您可以尝试使用序列化对象方法,也可以将接口抽象到HBase库,以便只在一个地方转换类型。