【问题标题】:Best way to count page view in Plone在 Plone 中计算页面浏览量的最佳方法
【发布时间】:2011-12-05 15:52:01
【问题描述】:

我正在处理一个需要童话般复杂使用页面浏览量的案例。

每个内容对象都会有页面浏览量,并且应该很容易访问,以便我们可以做与它相关的各种事情(按目录结果排序、显示、计算热门仪表...)。最接近的等价物是 youtube 视频的视图。

我正在考虑一些可能的实现方式:

  1. 使用注释存储和索引器创建 portal_catalog 索引和元数据。

  2. 仅使用索引器(使用 volatile 属性或根据前一个索引更新索引),这样我们就不必将频繁更改的数据写入两次。页面视图只存储在对象大脑中。

  3. 使用关系数据库。那么我们如何让它与 portal_catalog 一起使用呢?

  4. 在 Plone 之前使用包装层进行分析并通过某些 API 获取所需的数据。这降低了灵活性,但有助于减少 Plone 方面的大量工作(写入事件订阅者、检查会话、cookie ...),并且性能应该更好?

您对此有何想法/经验?

【问题讨论】:

    标签: logging plone zope web-analytics


    【解决方案1】:

    我们为客户项目(大型私有 Intranet)使用了外部日志分析器。架构:

    • 一个 js 库添加了一个“web bug”,一个带有额外查询参数的空 gif,从一个专用的 nginx 服务器加载。
    • 日志处理器拾取 nginx 日志,对其进行轮换,然后将行解析到数据库中,同时计算访问次数和其他元数据。 db 中的条目包括内容的 UID 以及其他有趣的角度。
    • 该网站对同一数据库具有只读访问权限,可以进行统计查询。

    页面计数很容易,只需在数据库中查询正确的 UID。排名列表并不难。查询统计信息,然后使用 UID 将目录数据附加到结果集。

    我们现在面临的最大问题是缺乏数据仓库知识(将数据库中的单个访问行转换为有效的聚合),我们正在研究重新设置此设置以使用 Piwik 作为统计引擎。

    在这种特殊情况下,我们不能使用 Google Analytics,但如果您没有这样的限制,我当然会建议您查看 collective.googleanalytics,看看您是否可以使其适合您的用例。

    【讨论】:

    • 似乎 Piwik 在每次请求时仍会写入数据库 (dev.piwik.org/trac/ticket/134),但它看起来确实非常漂亮。
    • 是的,但它是 MySQL 数据库,而不是 ZODB,所以我不太在意.. :-)
    • 有关使用collective.googleanalytics 更新内容项的流行度计数的示例,请参阅(未发布和不受支持的)svn.plone.org/svn/collective/collective.gapopularity/trunk。这种方法不能很好地扩展到大量内容项,但如果您只需要列出 N 个最常查看的项目,它可能会有所帮助。
    【解决方案2】:

    您已经看过这个产品了吗? : http://plone.org/products/collective.googleanalytics/

    它似乎符合您的需求,或者至少它可以成为您自定义的良好基础。

    【讨论】:

      【解决方案3】:

      每次访问都写入是 ZODB 的最坏情况。关系数据库通常很擅长这类事情,我会先看看。

      需要对数据进行排序?只需添加一些实用程序或内容类型方法来查询数据库。当您需要查找时,进行目录搜索,然后使用 db-connecting 方法对数据进行注释以进行排序。

      【讨论】:

        【解决方案4】:

        我们很久以前就做过了(plone2.5)。客户想要这个!一旦完成,它最终不是真正的需要。这是最喜欢的文章,它不等于观看次数最多的文章......所以内容评级是其中之一。

        所以首先与您的客户确认这一点。

        接下来满足您的需求的最佳方法是安装分析工具、googleanalytics 或其他任何工具,但要使用 API 来询问浏览次数最多的页面。如果您需要将其添加到 portal_catalog 中,您可以在查看文章时 + 仅每小时索引该值。

        【讨论】:

          【解决方案5】:

          我注意到来自 Nidelven 的人刚刚发布了 http://plone.org/products/Products.ZODBFriendlyCounter,它承诺在没有过多的 ZODB 写入/膨胀的情况下本机执行此操作。值得一试,希望听到更多关于此的专家意见。

          【讨论】:

            【解决方案6】:

            如果你使用灵巧,你应该自定义一个页面浏览行为,将注释数据添加到主对象,并且注释日期使用 volatile 属性。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-03-24
              • 1970-01-01
              • 2018-01-08
              • 2020-10-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多