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

标签 java hadoop hbase

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

最佳答案

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

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

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

长话短说,Hbase 这样做是为了加快速度并提高存储效率,同时将内部数据结构的开销保持在最低限度。

关于java - 为什么 HBase 将值存储为字节数组而不是类型值(如 String、Long 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11834544/

相关文章:

java - 根据用户输入值在 MySql 中创建表

hadoop - 在 Hadoop 集群上使用 Oozie 运行 Sqoop Action 时出现问题

hadoop - HBase 连接挂起在 INFO ClientCnxn - 服务器上的 session 建立完成

java - 如何计算UTC时间和本地时间之间的差异

java - 如何在文本字段中包含 'some' 文本时禁用按钮,并在该文本在文本字段中消失时重新启用它们

Java Regex : Replacing full stops with spaces, 或删除它们(如果它们是缩写的一部分)

hadoop - 亚马逊弹性 MapReduce : the number of launched map task

hadoop - 当我使用 aws 凭证时出现 Distcp 重试错误

hbase - 你如何计算hbase中单行的大小?

apache-spark - 执行 hbase 扫描时出现异常