我正在研究跟踪django应用程序中的事件(事件通常是与特定唯一用户ID绑定的点击)。
这些事件基本上包含一个类似“click”的事件类型,然后每个click事件将被分配给一个唯一的id(许多事件可以转到一个id),每个事件都有一个数据集,包括referrer等项目。 ..
我尝试过mixpanel,但是现在他们提供的数据api似乎太有限了,因为我似乎找不到通过一个唯一的id(除了事件本身)获取所有数据的方法。 / p>
我正在研究使用django-eventracker,但对于其他任何想到最佳方法的人感到好奇。 Mongo或CouchDb似乎是一个很好的选择,但芹菜/ rabbitmq看起来非常吸引人的mongo。将这些事件泵入现有应用程序db似乎在这一点上有所限制。
无论如何,这只是一个线索,可以看到其他人的想法以及他们如何实现这样的......
芽
答案 0 :(得分:3)
我不熟悉您提到的预打包解决方案。如果我从头开始设计这个,我会有一个简单的JS收集点击信息并通过Ajax将它发回服务器(使用你已经使用的任何JS框架),在服务器端我只需追加该信息到日志文件以便以后进行“离线”处理 - 这样就可以独立于django或其他服务器端框架了。
附加到日志文件是一个非常轻量级的操作,而用于Web的数据库通常针对读取密集型(不写入密集型)操作进行了优化,因此我同意您的看法将信息(因为它哄骗)强制拟合到现有应用程序的数据库中不太可能提供良好的性能。
答案 1 :(得分:2)
您可能希望为日志保留灵活的格式,以预测未来的需求或变化。从这个意义上说,无模式的面向文档的数据库很不错。一个优点是,您的数据结构将接近您以后执行的任何分析的应用程序需求(因此,避免一些不可避免的解析/数据修改工作)。
如果您正在考虑使用mysql,postgresql等,那么您应该查看rsyslog之类的内容来缓冲写入并避免使用大量日志记录来降低性能。 (对于这种类型的东西,我不能说芹菜和其他排队机制,但它们听起来很有希望。)
Mongodb有一些很好的功能,可以使它适合capped collections等日志记录。摘要可以在this post中找到。
答案 2 :(得分:1)
如果单击,则表示单击加载新页面的链接(或执行AJAX请求),那么您的目标是相当简单。 Web服务器倾向于保留有关请求的纯文本日志 - 包含有关用户,时间/日期,引荐来源,请求的页面等的信息。您可以检查这些日志并挖掘所需的统计信息。
另一方面,如果您的网络应用程序中点击不一定产生服务器请求,那么使用javascript收集点击信息是您最好的选择。