0

我想跟踪用户在网站上阅读了哪些文章。

然后有了这些数据,就可以知道:

1) - 最近一小时/日/周/月阅读的前 N ​​篇文章

2) - 显示推荐(“读过这个的用户,也读过那个”)

3) - 与 (1) 相同,但针对网站上的特定部分

由于该站点的流量很高(> 100 万次浏览/天),我不能为此使用 RDBMS。

我开始研究 NoSQL(特别是 cassandra),因为它对我来说是全新的,我不确定它是否是我需要的。

我很肯定我不是第一个需要这样的东西但找不到链接/文章给我关于如何做这样的事情的指示的人。NoSQL 是最好的方法吗?关于数据模型的任何提示?

谢谢。

4

2 回答 2

0

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

一定要看看这需要多长时间才能运行;我可能会将结果保留为参考表以供立即使用,并每隔几个小时使用后台进程对其进行更新。

于 2011-01-02T01:16:21.327 回答
0

,easyrec具有您需要的功能,并且可以管理 1M 操作(它使用 mysql)查看关于最大操作的论坛主题:论坛主题

于 2011-10-12T12:48:21.637 回答