Как разработать схему Hbase?

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

col1: entityID
col2: attributeName
col3: value

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

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

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

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

поэтому одна из моих идей заключалась в том, чтобы построить одну таблицу Hbase, которая будет хранить данные (таблица DATA, с идентификатором сущности как первичный индекс) и 2 "индексные" таблицы с атрибутомName в качестве первичного ключа, а другая со значением

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

Это разумный подход? или является "злоупотреблением" концепций Hbase?

В этом blog author скажите:

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

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

- Йонатан

Ответ 1

Вторичные индексы действительно были бы полезны для многих потенциальных приложений HBase, и я считаю, что разработчики действительно смотрят на это. Оформить заказ http://www.mail-archive.com/[email protected]/msg04801.html.

В то же время, если ваше хранилище данных приложений можно смоделировать как звездную схему (см. http://en.wikipedia.org/wiki/Star_schema), вам может понравиться для проверки решения, которое Hypertable предлагает для вторичных потребностей типа индекса http://markmail.org/message/rphm4q6cbar2ycgp

Ответ 2

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

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

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

и Таблица 2:

attribute1_value1 {
  entityID1;
}
attribute2_value2 {
  entityID1;
}