Каков наилучший способ получить все данные из таблицы HBase за последние X часов? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть поток событий, которые записаны в HBase. Каждое событие имеет user_id, event_timestamp и description.

Допустим, мне нужно запустить задание ETL, которое извлекает все данные из таблицы за последние 12 часов. Я думал о двух способах получения данных (я использую Java API):

  1. Для использования setTimeStamp метода сканирования.
  2. Использовать event_timestamp в качестве префикса rowkey, но, насколько я понимаю, это плохая практика, потому что это приводит к горячим точкам.

Есть ли лучшее решение?

1 Ответ

0 голосов
/ 15 сентября 2018

Ваш первый подход:

  1. Использовать setTimeStamp метод сканирования.

звучит как отличная идея.Вы абсолютно правы, что второй подход:

Использовать event_timestamp в качестве префикса rowkey, но, насколько я понимаю, это плохая практика, потому что это приводит к горячим точкам.

будет генерировать горячие точки, поэтому его не рекомендуется использовать вHBase или Bigtable.

Как правило, создание ключа строки префикс монотонно увеличивается (например, время, год-месяц-день и т. Д.) Или уменьшается (например, INT_MAX - текущее время и т. Д.).) очень проблематично и поэтому не рекомендуется.

Вы, безусловно, можете использовать значения, полученные из времени, в качестве суффикса для ключей строки: причина, по которой вы это сделаете, состоит в том, чтобы избежать роста какой-либо отдельной строкибыть слишком большим, поскольку строки не разбиты по регионам, а хранятся как атомарные единицы.

В этом случае время будет выражаться несколькими способами:

  1. один раз каксуффикс ключа строки, который будет грубым, например, <unique-id>-yyyymmdd
  2. во второй раз как отметка времени самих значений ячейки, которая может быть либо:

    • абсолютное время или
    • относительно к грубому суффиксу времени строки

Каждый из этих подходов имеет свои плюсы и минусы, которые зависят от ваших шаблонов запросов и конкретного варианта использования.Если вы хотите запрашивать данные в определенном временном диапазоне глобально, то лучше использовать абсолютное время, так как тогда вы можете выполнить глобальное сканирование с временным диапазоном, например, без создания фильтров с суффиксами сложных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...