假设我有这个RDBM表(Entity-attribute-value_model):
col1: entityID
col2: attributeName
col3: value
由于缩放问题,我想使用HBase。
我知道访问Hbase表的唯一方法是使用主键(游标)。您可以获取特定键的游标,并逐个迭代行。
问题是,在我的情况下,我希望能够迭代所有3列。 例如:
所以我有一个想法是构建一个Hbase表来保存数据(表DATA,其中entityID作为主索引),以及2个“索引”表,其中一个以attributeName作为主键,另一个表示值
每个索引表将保存DATA表的指针列表(entityID)。
这是一种合理的方法吗?或者是对Hbase概念的“滥用”?
HBase允许通过主要进行操作 键和扫描(想想:光标)在行上 范围。 (如果你有两个尺度和 需要二级指标,不用担心 - Lucene来救援!但那是另一篇文章。)
你知道Lucene如何提供帮助吗?
- Yonatan
答案 0 :(得分:5)
二级索引确实对HBase的许多潜在应用程序有用,我相信开发人员实际上正在研究它。结帐http://www.mail-archive.com/hbase-dev@hadoop.apache.org/msg04801.html。
与此同时,如果您的应用程序数据存储可以建模为星型模式(请参阅http://en.wikipedia.org/wiki/Star_schema),您可能希望查看Hypertable为二级索引类型需求提出的解决方案http://markmail.org/message/rphm4q6cbar2ycgp
答案 1 :(得分:0)
我建议使用两个不同的平面表:一个用于查找属性+给定entityID的值,另一个用于查找给定属性+值的entityID。
表1将如下所示:
entityID1 {
attribute1: value1;
attribute2: value2;
...
}
和表2:
attribute1_value1 {
entityID1;
}
attribute2_value2 {
entityID1;
}