Войти Регистрация
Data base

172. Последовательные id клиентов упёрлись в один регион

Средняя

HBase · Apache HBase 2.6

Команда Сбертеха пробовала HBase как оперативное хранилище и упёрлась в типичную проблему: ключи сравниваются как массивы байт, последовательные номера ложатся в один регион.

В нашей версии задачи: профили клиентов пишутся в таблицу с rowkey = client_id (восьмизначный номер, растёт). Ночная загрузка 40 млн обновлений идёт по возрастанию номера. Из 16 регион-серверов работает один, загрузка длится 6 часов.

Обращения к профилю — всегда get по client_id, сканов по диапазону номеров нет.

В работе: Проектирование rowkey для таблиц с монотонными id: заказы, клиенты, события.

Как проверяем Движка HBase в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
rowkeyгорячие регионыхеш-префикспредразбиение

Источник: Блог Сбера на Хабре: HBase как оперативное хранилище, 2018. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какой rowkey выбрать?

  • Детерминированный префикс из хеша: первые 2 байта CRC32(client_id) + client_id, таблица предразбита по префиксу
  • Случайная соль 0–15 перед client_id
  • client_id + текущее время
  • Оставить ключ, увеличить размер региона до 50 ГБ