跟踪综合浏览量并显示相关数据

时间:2011-01-02 00:49:57

标签: nosql tracking recommendation-engine

我想跟踪用户在网站上阅读的文章。

然后使用该数据,能够知道:

1) - 前N个文章在最后一小时/每天/每周/每月阅读

2) - 显示建议(“阅读此内容的用户,也阅读该内容”)

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

由于网站流量较高(每天视图大约1M次),因此无法使用RDBMS。

我开始关注NoSQL(特别是cassandra),因为它对我来说都是新手,我不确定这是我需要与否。

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

感谢。

2 个答案:

答案 0 :(得分:0)

SQL会非常愉快地完成这项工作。每天一百万次观看只有每秒一次;大多数数据库都可以轻松完成数百个。

您应该已经拥有一个文章表和一个用户表; 您将需要创建一个表Read是用户和文章之间的多对多关系,也许是时间戳。每次你发表文章时,你都会在Read表中添加一个条目,实质上是说'User x just read Article y'。

然后,您可以提出诸如“过去一周读取文章的次数”或“普通读者在星期四看多少篇文章”之类的问题。

对于速度,您可能还会发现预处理某些信息并执行选择性非规范化非常有用,例如,保持每篇文章的读取频率。

修改

我很想把你推荐给http://nosql.mypopescu.com/post/1016320617/mongodb-is-web-scale - 因为“NoSQL”不会减少所需的工作量或神奇地让它运行得更快(尽管它经常会让更容易投入更多的硬件,< strong> if 你可以用它喜欢的形式表达你的问题。

“阅读此内容的用户也阅读:”

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

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

答案 1 :(得分:0)

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