Как разработать схему 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;
}