Как не выводить на ленте пользователя просмотренный им контент?
Необходимо отслеживать "стену" пользователя (аля вконтакте) и не выводить на неё информацию, которую он уже видел.
Как грамотно это реализовать?
Думал насчёт назначения куки, но вот что если он просмотрит 50 000 материала, столько куки наверно даже не вместятся.
Или с localstorage, но тогда контент который не должен видеть пользователь всё равно будет генерироваться на сервере, то есть делать лишнюю операцию, что не есть хорошо.
Вариант сохранять всю эту информацию в базе, но тогда что если записей будет миллионы, как это скажется на производительности чтения и записи?
Задача на самом деле сложная :)
Я бы подумал так ли Вам это надо.
Решение в лоб: хранить табличку user_id, post_id - информация которую пользователь посмотрел.
Но нам нужно так или иначе отфильтровать post_id на выводе - засада в том, что запрос вида select ... from post where post_id not in ( ... ) не использует индекс и поэтому крайне медленный.
Нормальных решений работающих для десятков тысяч пользователей/постов я не знаю, все имеют в лучшем случае емкость count(user)*count(post)
Дмитрий Энтелис ютуб имеет колосальное количество пользователей и у них реализована такая возможность как просмотреть просмотренные + на видео отмечаются просмотренные ролики
Понятно что задача сложная, поэтому я и обратился за помощью к сообществу. Неправильная архитектура изначально может привести к определённым последствиям. Функционал нужен так как он является неотъемлемой частью идеи портала.