mysql — персонализация PHP пользователя

Есть новостной сайт — около 50 000 новостей в mysql db. Мне нужно создать список наиболее интересных и актуальных новостей для каждой страницы новостей и удалить уже просмотренные элементы для текущего пользователя (фактическая персонализация).
Я уже составил список новостей, просматриваемых в файлах cookie. Поэтому все, что мне нужно, это лучший архитектурный подход для фильтрации просматриваемых новостей.

Я вижу только варианты буксировки:

  1. Сохраните в памяти уже просчитанный полный список самых популярных новостей (20-30 тыс. Позиций) и по каждому запросу клиента удаляйте просмотренные.
  2. Каждый раз, когда пользователь открывает страницу, снова создайте для него список популярных предметов.

    В варианте 1 мы можем использовать кеширование с APC, REDIS и т. Д., Но всегда имеем большие массивы данных, копируемые на каждый запрос, который потребляет много памяти. Но в варианте 2 мы должны были бы каждый раз запрашивать db, чтобы это было не быстро и потребляло ресурсы ЦП и БД.

Так есть ли способ, которым я могу избежать использования такого количества ресурсов и сделать это быстро?

-2

Решение

Вы можете сделать что-то вроде

SELECT ... article data .. FROM Articles
LEFT JOIN ViewedArticles USING (articleId)
LEFT JOIN Users USING (userId)
WHERE ViewedArticles.articleId IS NULL AND Users.userId = :id

Это должно выбрать выбрать только статьи, которые не имеют соответствия articleId в ViewedArticles таблица с соответствием userId,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]