在 HBase 中存储和更新集的最佳方式是什么?



所以情况是这样的:我创建了一个SetWritable类,基本上是java.util.Set的包装器,它实现了Writable接口。 我有一个包含一列系列和一列的 HBase 表,该列的值是序列化的 SetWriable 对象。 现在,如果我想向集合中添加一个元素,我需要从 HBase 中提取行,将其反序列化为 SetWritable,添加我的元素,序列化 SetWwriteable,然后将其推送回 HBase。 所以这意味着我的映射器和HBase之间有很多很多的通信。 鉴于我正在处理大量数据,这可能会降低我的性能。

我想做的是将新元素发送到HBase,并在HBase服务器上有一些代码来反序列化SetWritable,添加元素,序列化SetWritable,然后提交它。 这可能吗? 协处理器可以提供帮助吗?

另一个想法:与其将我的集合序列化为一列,我可以为集合的每个已知元素设置一列。 一个缺点:我可能会有数十万(或数百万(列。 这是个问题吗?

本地或远程序列化不是正确的方法。 使用列限定符来存储您的值,您将获得所需的行为。

如果使用列限定符作为集合元素,则 hbase 可以稀疏地存储集合。 也就是说,你可以在一个集合中有一百万个元素;另一组具有不相交的百万元素。HBase 只能存储 200 万个项目。

添加或删除集合元素很容易:添加是 put(键、列、列限定符(,删除是删除(键、列、列限定符(。 要检索整个集合,您只需迭代行中的值即可。

修改这种方法以使用计数而不是二进制成员资格甚至并不困难 - 您只需使用原子增量指令:http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#increment%28org.apache.hadoop.hbase.client.Increment%29

相关内容

  • 没有找到相关文章

最新更新