【问题标题】:Tracking pageviews and displaying related data跟踪浏览量并显示相关数据
【发布时间】:2011-01-02 00:49:56
【问题描述】:

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

然后有了那个数据,就可以知道了:

1) - 在过去一小时/天/周/月阅读的前 N ​​篇文章

2) - 显示推荐(“阅读过此内容的用户也阅读过那个内容”)

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

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

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

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

谢谢。

【问题讨论】:

    标签: nosql tracking recommendation-engine


    【解决方案1】:

    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
    

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

    【讨论】:

    • 是的,但它可以扩展吗?在一个月内,我有大约 4000 万条记录,当用户访问一篇文章时,我必须向他们展示“看到这个的用户,也看到了那个”。这是加入和分组大量记录。由于不断添加新内容,我无法“预先计算这些东西”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多