HBase · Apache HBase 2.6
Pinterest строил графовый сервис Zen поверх HBase: на пике около 50 кластеров HBase, 9 тыс. инстансов EC2, больше 6 ПБ данных. Zen хранил рёбра в отдельной таблице, а не списком соседей в строке вершины.
Задача: рёбра «пользователь подписан на доску». У большинства досок десятки подписчиков, у популярных — до 8 млн. Запросы: «подписан ли A на доску B» (точечно) и «первые 100 подписчиков доски» (страницами).
В работе: Хранение графов и списков большой длины в wide-column базах.
Как проверяем
Движка HBase в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
Источник: Apache HBase Blog: Application Archetypes Redux, 2017 (раздел о Zen). Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Какую схему выбрать?
- Таблица рёбер: rowkey = hash(board_id) + board_id + type + follower_id, по строке на ребро; обратная таблица для follower → board
- Одна строка на доску, каждый подписчик — колонка
- Одна строка на доску, подписчики — версиями одной ячейки
- rowkey = follower_id, без обратной таблицы, «подписчики доски» — scan с фильтром по колонке