mcdb
@mcdb
То ли программист, то ли видение...

Каковы современные подходы в создании «Ленты новостей»?

Здравствуйте!

Собственно, проблема обычная, есть проект, в проекте есть различные сущности, например "Человек", "Заведение", "Событие". Все эти сущности могут генерировать новости. Пользователи могут подписываться на часть этих сущностей и потом читать в ленте их новости.

Вот тут самое волнительное и начинается: как и в чём хранить ленту? Нашел в основном двух-трёх годичные посты, где самым интересным вариантом показался вариант с хранением ленты для каждого пользователя в Redis. Но может за эти годы появились какие-то другие решения? Может есть какое-то специальное ПО для развёртывания feed-сервера?
  • Вопрос задан
  • 2846 просмотров
Решения вопроса 1
brutto
@brutto
Conceptmeister, Darudar
Хранение ленты для каждого пользователя самый экономичный и (что очень важно) легко масштабируемый способ.

Если грубо, то каждая активность у вас на проекте порождает событие, а на эти события вы уже навешиваете формирование лент пользователей удобным для вас способом. Нужно лишь верно выбрать хранилище, отвечающее вашим задачам. А выбор будет определяться следующими характеристиками:
  • кол-во пользователей
  • кол-во порождаемых активностей
  • срок хранения ленты пользователя
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ilyaerin
@ilyaerin
ruby разработчик
Вроде все довольно просто. При наличии индексов в таблице новостей саму ленту можно и не хранить. Сохраняйте только подписки пользователей на сущности. Вроде такого:

Таблица news : id / autor_type / autor_id / ...
Где author_type - ссылка на таблицу сущности, author_id - соответственно id сущности

Формируете ленту для пользователя запросом вроде:
SELECT * FROM news WHERE (author_type = "$1" AND author_id = "$2") AND (author_type = "$3" AND author_id = "$4") ...
Ответ написан
dezconnect
@dezconnect
Актуальный для меня вопрос, в скором времени запилю статью про одну из реализаций ленты на PostgreSQL с выборками не более 1-2мс на достаточно больших объемах данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы