【问题标题】:Why HBase stores value as byte array instead of typed value (like String, Long, etc)为什么 HBase 将值存储为字节数组而不是类型值(如 String、Long 等)
【发布时间】:2013-04-15 06:54:41
【问题描述】:

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

【问题讨论】:

    标签: java hadoop hbase


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 请谁能告诉我如何在 hbase 中存储数据类型并检索它们?我真的是 hbase 新手,请帮帮我
    • 如何在 hbase 中存储数据类型并检索它们是什么意思?另外,如果你把它作为一个新问题问会更好。此部分适用于 cmets。
    • stackoverflow.com/questions/23215492/… 这是链接,请帮帮我:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      相关资源
      最近更新 更多