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

134. Новый твит в ленте на 800 записей

Средняя

Redis · Redis 7.4.11

В 2013 году Twitter обслуживал 150 млн активных пользователей и около 300 тыс. чтений лент в секунду. Домашняя лента хранилась в Redis готовой: при публикации твита его id дописывался в ленту каждого подписчика (fanout on write), а длина ленты ограничивалась примерно 800 записями.

Лента пользователя 42 — список timeline:42, новые id в голове (индекс 0). Подписка опубликовала твит 1913000777. Добавьте его в ленту так, чтобы в ней осталось не больше 800 самых свежих id. Последняя команда во всех вариантах — LRANGE timeline:42 0 -1, по ней видно ленту целиком.

В работе: Ленты, история уведомлений, последние N событий пользователя.

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

Источник: доклад Twitter «Timelines at Scale», пересказ High Scalability, 2013. Условие пересказано своими словами.

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

Какая последовательность добавит твит в голову ленты и оставит не больше 800 записей?

  • LPUSH, затем LTRIM 0 799
  • RPUSH, затем LTRIM 0 799
  • LTRIM до LPUSH
  • Только LPUSH