所以情況如下:我創建了一個SetWritable類,基本上是java.util.Set的封裝器,它實現了Writable接口。我有一個有一列家族和一列的HBase表,該列的值是序列化的SetWritable對象。現在,如果我想添加一個元素到集合中,我需要從HBase中取出行,將它反序列化爲SetWritable,添加我的元素,序列化SetWritable,然後將它推回到HBase。所以這意味着我的映射器和HBase之間的通信量很大。鑑於我正在處理大量數據,這可能會導致我的表現不佳。在HBase中存儲和更新Set的最佳方式是什麼?
我想要做的就是將新元素髮送到HBase,並在HBase服務器上有一些代碼對SetWritable進行反序列化,添加元素,序列化SetWritable,然後提交它。這可能嗎?協處理器可以提供幫助嗎?
另一個想法:不是將我的集合序列化到一個列中,我可以爲集合中的每個已知元素設置一個列。其中一個缺點是:我可能會收到數十萬(或數百萬)列。這是一個問題嗎?
謝謝你,大衛。這正是我所需要的。然而,這引出了我的下一個問題:是否有一個列數百萬列的問題?基本上,我需要爲我的系統中的每個用戶提供一列。 – sangfroid
不確定你的意思是什麼問題。 HBase數據稀疏,所以沒有數據的列不佔用空間。如果每行都有數百萬列,那麼您可能會遇到行數大於您所在地區的問題。但是,只要你有足夠的內存來緩存你最大的行,你應該沒問題。但是,找出最好的方法是測試它。 – David