11

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

col1: entityID
col2: attributeName
col3: value

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

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

问题是,就我而言,我希望能够迭代所有 3 列。例如 :

  • 对于给定的 entityID,我想获取它的所有属性和值
  • 对于给定的属性名称和值,我想要所有的 entitiIDS ...

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

每个索引表都将保存 DATA 表的指针(实体 ID)列表。

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

在这篇博客中,作者说:

HBase 允许通过主键获取操作并在行范围内扫描(想想:游标)。(如果你有二级索引的规模和需要,别担心 - Lucene 来拯救!但那是另一篇文章。)

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

——约纳坦

4

2 回答 2

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

于 2009-02-13T15:54:39.520 回答
0

我建议使用两个不同的平面表:一个用于查找给定 entityID 的属性 + 值,另一个用于查找给定属性 + 值的 entityID。

表 1 如下所示:

entityID1 {
  attribute1: value1;
  attribute2: value2;
  ...
}

和表 2:

attribute1_value1 {
  entityID1;
}
attribute2_value2 {
  entityID1;
}
于 2013-06-04T15:00:40.493 回答