Ваш первый подход:
- Использовать
setTimeStamp
метод сканирования.
звучит как отличная идея.Вы абсолютно правы, что второй подход:
Использовать event_timestamp
в качестве префикса rowkey, но, насколько я понимаю, это плохая практика, потому что это приводит к горячим точкам.
будет генерировать горячие точки, поэтому его не рекомендуется использовать вHBase или Bigtable.
Как правило, создание ключа строки префикс монотонно увеличивается (например, время, год-месяц-день и т. Д.) Или уменьшается (например, INT_MAX
- текущее время и т. Д.).) очень проблематично и поэтому не рекомендуется.
Вы, безусловно, можете использовать значения, полученные из времени, в качестве суффикса для ключей строки: причина, по которой вы это сделаете, состоит в том, чтобы избежать роста какой-либо отдельной строкибыть слишком большим, поскольку строки не разбиты по регионам, а хранятся как атомарные единицы.
В этом случае время будет выражаться несколькими способами:
- один раз каксуффикс ключа строки, который будет грубым, например,
<unique-id>-yyyymmdd
во второй раз как отметка времени самих значений ячейки, которая может быть либо:
- абсолютное время или
- относительно к грубому суффиксу времени строки
Каждый из этих подходов имеет свои плюсы и минусы, которые зависят от ваших шаблонов запросов и конкретного варианта использования.Если вы хотите запрашивать данные в определенном временном диапазоне глобально, то лучше использовать абсолютное время, так как тогда вы можете выполнить глобальное сканирование с временным диапазоном, например, без создания фильтров с суффиксами сложных строк.