2013-09-05 4 views
3

Мне нужно хранить информацию о сущности ежемесячно в таблице HBase. Я хочу обработать все данные месяца, доступные до сих пор для объектов, использующих логику mapreduce. Я запутался следует ли выбирать высок-узкий или плоский широкий дизайн для таблицы HBase.HBase Table design - Tall-narrow vs Flat-wide approach

Использование плоского широкого подхода, идентификатор объекта будет храниться как ключ строки и идентификатор месяца в качестве разделителя столбцов, а подробности в качестве значения квалификаторов. В HBase-mapreduce я могу получить все данные для объекта на карте и в процессе.

Тесно-узкий подход будет хранить ключ строки в виде комбинации идентификатора объекта и месяца. Кроме того, детали будут храниться в отдельной колонке. В HBase -mapreduce я должен получить данные для entiy на карте и агрегировать в течение всех месяцев в редукторе.

Какой подход лучше и дает лучшую производительность? Заранее спасибо.

+0

Значит, вам нужно хранить информацию один раз в месяц? Также, мотыга? – Tariq

+0

Информационная грануляция - ежемесячно. Может случиться так, что конкретная ежемесячная информация для субъекта может быть обновлена ​​часто. Также информация, которую нужно сохранить, состоит из 500 ключевых значений. Могут быть миллионы таких объектов. У меня нет точной цифры объема данные. – InfamousCoconut

ответ

3

Несколько предположений:

  • У вас есть много объектов, и вы хотите сохранить свое состояние один раз в месяц
  • Результат вы хотите от работы MapReduce агрегатов над этими объектами и сохраняет информацию, основанную на месяц , например Какие цифры были (во всех субъектах) в январе 2013 г.
  • Вы не хранить ОГРОМНОЕ количество информации по каждому субъекту в месяц

Я думаю, что подход Flat-Wide таблицы даст лучшие результаты.

Проектирование плоского и широкоформатного стола означает, что все данные объекта остаются вместе в строке (поэтому важно, чтобы размер не был огромным. Если я правильно помню, HBase хранит данные в блоках на основе столбцов, и это уровень, над которым происходит уплотнение. подробнее под Suggestions on performance optimization section). Поскольку все это вместе, вы должны иметь возможность просто извлекать любую информацию об объектах быстро, учитывая, что у вас есть информация о кванторе квантования столбца строки-столбца. Также, предполагая, что идентификаторы сущностей либо хешированы (или вы префикс их с хешем), вы также должны иметь возможность блокировать значения monotonically increasing.

Относительно запуска MapReduce Job. Так как ваши данные распределяются равномерно по всем серверам региона в этот момент, ваши вычисления также будут распределены. Значение всей машины одинаково вероятно будет равным количеством работы. Однако вы можете получить это с помощью модели Tall-Narrow (при условии, что вы правильно разработали схему).