Как разделить неравномерно распределенные события на временной шкале?
Я работаю над системой обработки событий, где мне нужно читать данные о событиях из таблицы hbase. События, которые я читаю, сохраняются на основе их метки времени. Когда я читаю за целый день (24 часа), я нахожу периоды в день, когда у меня 1 миллион событий в час (например, в обычные рабочие часы), и другие периоды, когда я получаю только несколько тысяч событий. Поэтому, когда я разделю день поровну, я получу разделы (и рабочие) с большим количеством работы, а некоторые с низким уровнем работы. Есть ли какая-либо концепция о том, как я могу разделить свой день, чтобы в нерабочее время я использовал больше часов для обработки одного раздела, а в основные часы - меньше? Это приведет к чему-то вроде: * с 0-6 утра использовать 4 раздела * с 6 утра до 6 вечера использовать 60 разделов * с 6 вечера до 12 утра использовать 6 разделов
1 ответ
Если вы просто используете временную метку для ключа строки, это означает, что у вас уже есть проблемы с горячей точкой региона, даже перед любой обработкой. Простое решение - добавить ключ шардинга до отметки времени.
Row key = (timestamp % number of regions) + timestamp.
Это будет равномерно распределять строки по регионам.