我想跟踪用户在网站上阅读的文章。
然后使用该数据,能够知道:
1) - 前N个文章在最后一小时/每天/每周/每月阅读
2) - 显示建议(“阅读此内容的用户,也阅读该内容”)
3) - 与(1)相同,但对于网站上的特定部分
由于网站流量较高(每天视图大约1M次),因此无法使用RDBMS。
我开始关注NoSQL(特别是cassandra),因为它对我来说都是新手,我不确定这是我需要与否。
我很可能我不是第一个需要这样的东西的人但是找不到链接/文章给我指示如何做这样的事情。 NoSQL是最好的方法吗?关于数据模型的任何提示?
感谢。
答案 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