一种实现在hbase中存储set的思路

我们知道,hbase中存放的数据就是二进制的键值对,不像redis一样提供了各种各样数据结构的支持。如果我们想在hbase中存储set型的数据,该怎么做呢?当然,一种方法就是把这个set当作一个对象整体的序列化之后存到hbase上,但这样后续无论增删改查,都需要先把存储内容拿回来,做相应的修改后,再整体覆盖原有值。这么做显然不太合理。

我们希望的效果至少要包括这么几个特点:
1. 元素自动去重,这是一个set的基本要求;
2. 增删改这些对集合单个元素的操作,无须处理其他元素;
3. 方便查询,包括查询整个集合,和判断某一特定元素是否存在

这里提供一种思路实现这种效果,就是把元素的值存放在hbase的qualifier中,作为一个键,而value则随便塞一个值,不实际使用。

这样,由于hbase本身会对qualifier判重,所以元素不会重复,所有对单个元素的操作,都只需要操作这个qualifier, 需要获取整个集合时,也可以通过直接查这一行来实现。