推荐使用点击/事件跟踪机制(python、Django、celery、mongo等)

2024-06-01 09:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究如何在django应用程序中跟踪事件(事件通常是与特定的唯一用户id相关联的单击)。在

这些事件本质上包含一个事件类型,如“click”,然后每个click事件将被分配到一个惟一的id(许多事件可以转到一个id),并且每个事件都有一个数据集,包括referer等项。。。在

我尝试过mixpanel,但目前他们提供的数据api似乎太有限了,因为我似乎无法找到一种方法,通过一个唯一的id(除了事件本身)来获取所有数据。在

我正在研究使用djangoeventracker,但是我很好奇其他人认为最好的方法是什么。Mongo或CouchDb在这里似乎是个不错的选择,但是芹菜/rabbitmq在Mongo中看起来确实很有吸引力。在这一点上,将这些事件注入到现有的应用程序数据库中似乎是有局限性的。在

不管怎样,这只是一个线索,看看其他人对此有什么想法,以及他们是如何实现这样的东西的。。。在

开枪


Tags: 数据django方法用户apiid应用程序类型
3条回答

您可能希望为日志保留一个灵活的格式,以预测未来的需要或更改。从这个意义上讲,无模式的面向文档的数据库是不错的。一个优点是,无论以后执行什么分析,数据结构都将接近应用程序的需要(因此,避免一些不可避免的解析/数据咀嚼工作)。在

如果您正在考虑使用mysql、postgresql或类似的工具,那么您应该研究类似于rsyslog的方法来缓冲写操作,并避免由于大量日志记录而造成的性能损失。(关于芹菜和其他排队机制,我不能多说,但它们听起来很有前途。)

Mongodb有一些很好的特性,使得它能够适应日志记录,比如capped collections。摘要可以在this post中找到。在

如果单击是指单击加载新页面(或执行AJAX请求)的链接,那么您的目标是相当简单。Web服务器倾向于保存有关请求的纯文本日志—包含有关用户、时间/日期、引用者、请求的页面等的信息。您可以检查这些日志并挖掘所需的统计信息。在

另一方面,如果您有一个web应用程序,其中单击不一定会生成服务器请求,那么使用javascript收集单击信息是最好的选择。在

我不熟悉您提到的预打包解决方案。如果我从头开始设计这个,我会有一个简单的JS收集点击的信息,然后通过Ajax(使用你已经在使用的任何JS框架)将其发送回服务器,在服务器端,我只需将这些信息附加到日志文件中,以便以后进行“脱机”处理,这样就可以独立于django或其他服务器端框架,基本上。在

附加到日志文件是一个非常轻量级的操作,而用于web的DBs通常针对读密集型(而不是写密集型)操作进行了优化,因此我同意您的观点,即强制将信息(如它所欺骗的那样)放入现有应用程序的数据库中不太可能提供良好的性能。在

相关问题 更多 >