SQL はこれを非常にうまく処理します。1 日 100 万回のビューは、1 秒あたりわずか 10 回です。ほとんどのデータベースは数百を簡単に実行できます。
Articles 用のテーブルと Users 用のテーブルが既にあるはずです。ユーザーと記事の間の多対多の関係であり、おそらくタイムスタンプであるテーブル Read を作成する必要があります。記事を配信するたびに、「ユーザー x は記事 y を読んだ」というエントリを Read テーブルに追加します。
次に、「記事 y は過去 1 週間に何回読まれましたか」、「平均的な読者は木曜日に何記事を見ますか」などの質問をすることができます。
速度を上げるために、この情報の一部を前処理し、選択的な非正規化を行うことも役立つ場合があります。たとえば、記事ごとに読まれた回数をカウントします。
編集:
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
これを実行するのにかかる時間を必ず確認してください。おそらく、すぐに使用できるように結果を参照テーブルとして保持し、数時間ごとにバックグラウンド プロセスで更新します。