SQL сделает это довольно счастливо. Миллион просмотров в день - это всего десять в секунду; большинство баз данных легко справятся с несколькими сотнями.
У вас уже должна быть таблица для статей и таблица для пользователей;
вам нужно будет создать таблицу Read, которая представляет собой отношение «многие ко многим» между пользователями и статьями и, возможно, отметку времени. Каждый раз, когда вы читаете статью, вы добавляете в таблицу «Чтение» запись, в сущности говоря: «Пользователь x только что прочитал статью y».
Затем вы можете задать такие вопросы, как «Сколько раз статью читали за последнюю неделю» или «Сколько статей просматривает рядовой читатель по четвергам».
Для ускорения вам также может быть полезно предварительно обработать часть этой информации и сделать выборочную денормализацию, например, сохраняя количество статей для каждой статьи, как часто она читалась.
Edit:
Я испытываю желание отослать вас к http://nosql.mypopescu.com/post/1016320617/mongodb-is-web-scale - то, что «NoSQL» не уменьшает объем необходимой работы или магическим образом ускоряет его работу (хотя часто облегчает использование большего количества оборудования если , то вы можете сформулировать свою проблему в форме, которая ему нравится).
"Пользователи, которые читают это, также читают:"
SELECT
Article.id, OtherArticle.id as oid, COUNT(*) AS cnt
FROM
Article
JOIN Read AS R1 ON Article.id=R1.article_id
JOIN Read AS R2 ON R1.user_id=R2.user_id AND NOT R1.article_id=R2.article_id
JOIN Article AS OtherArticle on R2.article_id=OtherArticle.id
GROUP BY
OtherArticle.id, OtherArticle.title
ORDER BY
cnt DESC, OtherArticle.title ASC
Во что бы то ни стало посмотрите, сколько времени это займет, чтобы бежать; Я бы, вероятно, сохранил результат в виде справочной таблицы для немедленного использования и обновлял бы его фоновым процессом каждые пару часов.