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

174. Граф подписок: список соседей в строке или таблица рёбер

Сложная

HBase · Apache HBase 2.6

Pinterest строил графовый сервис Zen поверх HBase: на пике около 50 кластеров HBase, 9 тыс. инстансов EC2, больше 6 ПБ данных. Zen хранил рёбра в отдельной таблице, а не списком соседей в строке вершины.

Задача: рёбра «пользователь подписан на доску». У большинства досок десятки подписчиков, у популярных — до 8 млн. Запросы: «подписан ли A на доску B» (точечно) и «первые 100 подписчиков доски» (страницами).

В работе: Хранение графов и списков большой длины в wide-column базах.

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

Источник: Apache HBase Blog: Application Archetypes Redux, 2017 (раздел о Zen). Условие пересказано своими словами.

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

Какую схему выбрать?

  • Таблица рёбер: rowkey = hash(board_id) + board_id + type + follower_id, по строке на ребро; обратная таблица для follower → board
  • Одна строка на доску, каждый подписчик — колонка
  • Одна строка на доску, подписчики — версиями одной ячейки
  • rowkey = follower_id, без обратной таблицы, «подписчики доски» — scan с фильтром по колонке