Как организовать канал отдельного пользователя, состоящий из контента других пользователей?
В качестве учебного упражнения я разрабатываю небольшую игрушечную платформу для социальных сетей в стиле Facebook. Прямо сейчас мой наивный подход заключается в следующем:
- У каждого пользователя есть список контента, который он опубликовал [1]
- Когда пользователь запрашивает свой канал, список контента каждого друга опрашивается, чтобы упорядочить и заполнить канал
Плюсы: относительно легко реализовать Минусы: вычислительно дорого
Альтернативный дизайн выглядит следующим образом:
- У каждого пользователя есть "список каналов", который содержит идентификатор каждого сообщения, которое он может видеть, наряду с идентификатором, обозначающим позицию этого элемента в ленте этого конкретного пользователя [2][3].
- Список фидов каждого пользователя заполняется через схему pub-sub, которая здесь может не подходить.
- По запросу на канал серверная часть извлекает список каналов (до определенного момента), а затем разыменовывает пароли идентификаторов элементов списка каналов (возвращая их все сразу).
Оба эти решения кажутся выполнимыми, однако я знаю, что они не очень масштабируемы [4]. Существуют ли похожие публичные алгоритмы, к которым я мог бы обратиться за руководством?
Дополнительные примечания: обновления будут передаваться с помощью опроса - опрос будет включать все идентификаторы элементов канала для элементов, которые в данный момент отображаются в окне канала пользователя. Я работаю над механизмом для
[1] У меня есть некоторая логика подкачки, предназначенная для обработки пользователем, создающим значительный объем контента.
[2] У меня также есть некоторая логика подкачки, запланированная для этого.
[3] Этот метод идентификации также позволяет довольно легко обновлять (пользователь A в настоящее время просматривает канал до точки x, однако верхняя часть его списка находится в точке x+y, поэтому обновление доступно.
[4] Несмотря на то, что это система игрушек, я хотел бы построить ее максимально жестко и максимально усвоить. Мой следующий шаг - прочитать, как Мастодонт решает эту проблему.