如何设计Hbase架构?

时间:2008-12-17 16:42:52

标签: rdbms hadoop hbase hive

假设我有这个RDBM表(Entity-attribute-value_model):

col1: entityID
col2: attributeName
col3: value

由于缩放问题,我想使用HBase。

我知道访问Hbase表的唯一方法是使用主键(游标)。您可以获取特定键的游标,并逐个迭代行。

问题是,在我的情况下,我希望能够迭代所有3列。 例如:

  • 对于给定的entityID,我希望获得所有的attriutes和值
  • for give attributeName和value我想要所有的entitiIDS ...

所以我有一个想法是构建一个Hbase表来保存数据(表DATA,其中entityID作为主索引),以及2个“索引”表,其中一个以attributeName作为主键,另一个表示值

每个索引表将保存DATA表的指针列表(entityID)。

这是一种合理的方法吗?或者是对Hbase概念的“滥用”?

在此blog author中说:

  

HBase允许通过主要进行操作   键和扫描(想想:光标)在行上   范围。 (如果你有两个尺度和   需要二级指标,不用担心    - Lucene来救援!但那是另一篇文章。)

你知道Lucene如何提供帮助吗?

- Yonatan

2 个答案:

答案 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;
}