Как разработать схему Hbase? - PullRequest
11 голосов
/ 17 декабря 2008

предположим, что у меня есть эта таблица RDBM ( Entity-attribute-value_model ):

col1: entityID
col2: attributeName
col3: value

и я хочу использовать HBase из-за проблем с масштабированием.

Я знаю, что единственный способ получить доступ к таблице Hbase - использовать первичный ключ (курсор). Вы можете получить курсор для определенной клавиши и последовательно перебирать строки.

Проблема в том, что в моем случае я хочу иметь возможность повторять все 3 столбца. например:

  • для данного entityID, я хочу получить все его атрибуты и значения
  • для данного атрибута name и значения, которое я хочу для всех прав ...

поэтому у меня была одна идея - создать одну таблицу Hbase, в которой будут храниться данные (таблица DATA с entityID в качестве первичного индекса), и две таблицы «index», одна из которых attributeName является первичным ключом, а другая - со значением

каждая таблица индексов будет содержать список указателей (entityID) для таблицы DATA.

Это разумный подход? или это «злоупотребление» понятиями Hbase?

В этом блоге авторе говорят:

HBase позволяет получать операции по основным ключ и сканирует (думаю: курсор) над строкой диапазоны. (Если у вас есть и масштаб, и не нужны вторичные индексы, не волнуйтесь - Люсьен на помощь! Но это другой пост.)

Вы знаете, как может помочь Lucene?

- Йонатан

Ответы [ 2 ]

5 голосов
/ 13 февраля 2009

Вторичные индексы действительно были бы полезны для многих потенциальных приложений 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

0 голосов
/ 04 июня 2013

Я рекомендую иметь две разные плоские таблицы: одну для поиска атрибутов + значений с учетом entityID и одну для поиска атрибутов entityID + значений.

Таблица 1 будет выглядеть так:

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

и Таблица 2:

attribute1_value1 {
  entityID1;
}
attribute2_value2 {
  entityID1;
}
...