我在HBASE中最欣赏的最相关的功能是键范围扫描,您可以将更高级别的键与更低级别的键组合在一起,这样您就可以获得与更高级别键相关的数据层次结构。
例如:
CUSTOMER ID = C100
DEPARTMENT ID = D100
USER ID = U100
以上示例的关键是
C100D100U100K01 : "my data for k01"
C100D100U100K02 : "my data for k02"
C100D100U100K03 : "my data for k03"
...
通过上述操作,您可以通过在C100 *上执行范围扫描,或者根据需要提供更多详细信息(如C100D100U100 *等)来获取与您的客户ID相关的所有数据。
在NOSQL解决方案中,HBASE是否有其他替代方案?
答案 0 :(得分:2)
任何分层键值存储都可以使用。维基百科上有一个(简短)列表:Hierarchical key-value store。
我最了解的是GT.M,您的示例数据可能如下所示:
customer("C100","D100","U100","K01")="my data for k01"
customer("C100","D100","U100","K02")="my data for k02"
customer("C100","D100","U100","K03")="my data for k03"
因此,customer("C100")
可让您访问单个客户的所有数据,customer("C100","D100")
可让您访问单个客户的单个部门的所有数据等。
答案 1 :(得分:1)
如果您使用视图(索引),Couchbase具有类似的功能。您可以在所有键上创建视图,并对它们进行范围查询。据我所知,你只能在密钥的末尾但不是开头的通配符,例如:
AAABBBCCCDDD* // yes
*BBBCCCDDDEEE // no
AAA*CCCDDDEEE // no
这是因为它对键进行排序,当您查询时,您获得了一个子范围。但是,您可以通过创建按不同顺序排序的视图来解决此问题。
更多信息:http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views.html
答案 2 :(得分:1)
Riak有二级索引,可以通过匹配索引或范围扫描来查询数据。二级索引的结果可以用作Riak的MapReduce的输入。请查看此内容以获取更多详细信息:riak secondary indexes