SQL 会很高兴地做到这一点。每天一百万的浏览量只有每秒十次;大多数数据库将轻松完成数百个。
您应该已经有一个文章表和一个用户表;您将需要创建一个表 Read,它是用户和文章之间的多对多关系,可能还有时间戳。每次你提供一篇文章时,你都会在 Read 表中添加一个条目,本质上是说“用户 x 刚刚阅读了文章 y”。
然后,您可以提出诸如“过去一周阅读第 y 条的次数”或“普通读者在星期四看多少篇文章”之类的问题。
为了速度,您可能还会发现预处理这些信息并进行选择性反规范化很有用,例如,保持每篇文章的阅读频率。
编辑:
我很想将您推荐给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
一定要看看这需要多长时间才能运行;我可能会将结果保留为参考表以供立即使用,并每隔几个小时使用后台进程对其进行更新。