所以情况如下:我创建了一个SetWritable类,基本上是java.util.Set的封装器,它实现了Writable接口。我有一个有一列家族和一列的HBase表,该列的值是序列化的SetWritable对象。现在,如果我想添加一个元素到集合中,我需要从HBase中取出行,将它反序列化为SetWritable,添加我的元素,序列化SetWritable,然后将它推回到HBase。所以这意味着我的映射器和HBase之间的通信量很大。鉴于我正在处理大量数据,这可能会导致我的表现不佳。在HBase中存储和更新Set的最佳方式是什么?
我想要做的就是将新元素发送到HBase,并在HBase服务器上有一些代码对SetWritable进行反序列化,添加元素,序列化SetWritable,然后提交它。这可能吗?协处理器可以提供帮助吗?
另一个想法:不是将我的集合序列化到一个列中,我可以为集合中的每个已知元素设置一个列。其中一个缺点是:我可能会收到数十万(或数百万)列。这是一个问题吗?
谢谢你,大卫。这正是我所需要的。然而,这引出了我的下一个问题:是否有一个列数百万列的问题?基本上,我需要为我的系统中的每个用户提供一列。 – sangfroid
不确定你的意思是什么问题。 HBase数据稀疏,所以没有数据的列不占用空间。如果每行都有数百万列,那么您可能会遇到行数大于您所在地区的问题。但是,只要你有足够的内存来缓存你最大的行,你应该没问题。但是,找出最好的方法是测试它。 – David