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

167. История просмотров, которая растёт годами

Сложная

Apache Cassandra · Apache Cassandra 5.0

Netflix сначала хранил всю историю просмотров клиента в одной строке Cassandra с ключом CustomerId, каждый просмотр — отдельная колонка. Записей примерно в 9 раз больше, чем чтений.

Пока подписчиков было меньше и истории короче, схема работала. Через несколько лет у активных клиентов набрались тысячи просмотров, чтение всей истории замедлилось, а компакция переписывала большие строки снова и снова.

Интерфейсу почти всегда нужны недавние просмотры, полная история — редко (страница «История», рекомендации раз в сутки).

В работе: Временные ряды на пользователя: история заказов, просмотров, транзакций за много лет.

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

Источник: Netflix Tech Blog: Scaling Time Series Data Storage, Part I, 2018. Условие пересказано своими словами.

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

Какое изменение модели Netflix в итоге выбрал?

  • Разделить историю на «живую» несжатую часть с недавними просмотрами и сжатую архивную часть, которую фоновая задача пополняет и хранит чанками
  • Добавить вторичный индекс на дату просмотра
  • Увеличить gc_grace_seconds и включить ALLOW FILTERING для чтения истории
  • Перенести историю в одну большую партицию на страну