我正在处理一个需要非常复杂地使用页面 View 的案例。
每个内容对象都会有页面 View ,并且应该可以轻松访问它,以便我们可以执行与其相关的各种操作(按目录结果排序、显示、计算流行度...)。最接近的等效项是 YouTube 视频的 View 。
我正在考虑一些可能的方法来实现这一点:
使用注释存储和索引器创建portal_catalog索引和元数据。
仅使用索引器(要么使用 volatile 属性,要么根据先前的索引更新索引),这样我们就不必将经常更改的数据写入两次。页面 View 仅存储在对象大脑中。
使用关系数据库。那么我们怎样才能让它与portal_catalog一起工作呢?
在 Plone 之前使用包装层进行分析并通过某些 API 获取所需的数据。这牺牲了灵 active ,但有助于减少 Plone 端的大量工作(写入事件订阅者、检查 session 、cookie ...),并且性能应该更好?
您对此有何想法/经验?
最佳答案
我们在客户项目(大型私有(private)内部网)中使用了外部日志分析器。架构:
- js 库添加了一个“网络 bug”,即一个带有附加查询参数的空 gif,从专用的 nginx 服务器加载。
- 日志处理器拾取 nginx 日志,轮换它们,并将这些行解析到数据库中,同时计算访问量和附加元数据。数据库中的条目包括内容的 UID 以及其他有趣的角度。
- 该网站对同一数据库具有只读访问权限,以进行统计查询。
页面计数就变得很简单,只需在数据库中查询正确的 UID 即可。排名并没有那么难;查询统计信息,然后使用 UID 将目录数据附加到结果集。
我们现在面临的最大问题是缺乏数据仓库专业知识(将数据库中的各个访问行转换为有效的聚合),我们正在考虑重新调整此设置以使用 Piwik作为统计引擎。
在这种特殊情况下,我们无法使用 Google Analytics,但如果您没有这样的限制,我当然建议您查看 collective.googleanalytics看看是否可以使其适合您的用例。
关于logging - 在 Plone 中计算页面浏览量的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732532/