关于点击/事件追踪机制的推荐(Python,Django,Celery,Mongo等)

8 投票
3 回答
3703 浏览
提问于 2025-04-16 01:24

我在研究如何在一个django应用中追踪事件(这些事件通常是与特定用户ID相关的点击)。

这些事件基本上会包含一个事件类型,比如“点击”,然后每个点击事件会被分配一个唯一的ID(多个事件可以对应一个ID),每个事件还会有一些数据,比如来源等信息。

我尝试过mixpanel,但目前他们提供的数据接口似乎太有限了,因为我找不到通过唯一ID获取所有数据的方法(除了事件本身)。

我在考虑使用django-eventracker,但也想听听其他人对最佳实现方式的看法。Mongo或CouchDb在这里看起来是个不错的选择,但celery/rabbitmq与mongo的组合也很吸引人。把这些事件直接放到现有应用的数据库里现在感觉有点局限。

总之,这只是一个讨论,想看看其他人对此的想法,以及他们是如何实现类似功能的……

随便聊聊吧

3 个回答

1

如果你说的“点击”是指点击一个链接,然后加载一个新页面(或者执行一个AJAX请求),那么你想做的事情其实很简单。网络服务器通常会保存一些普通文本的日志,里面记录了关于用户的信息,比如时间、日期、来源、请求的页面等等。你可以查看这些日志,从中提取你需要的统计数据。

另一方面,如果你有一个网页应用,点击不一定会产生服务器请求,那么用JavaScript来收集点击信息就是最好的办法了。

2

你可能想要保持日志的灵活格式,以便将来有需要或变化时能适应。在这方面,无模式的文档型数据库就很不错。一个好处是,你的数据结构会更贴近你的应用需求,这样在后续进行分析时,可以避免一些不可避免的数据解析和处理工作。

如果你在考虑使用mysql、postgresql之类的数据库,那么你可以看看像 rsyslog 这样的工具,它可以帮助你缓冲写入操作,避免在大量日志记录时性能下降。(我对celery和其他排队机制了解不多,但听起来很有前景。)

Mongodb有一些很不错的功能,适合用来记录日志,比如 限制集合。你可以在 这篇文章 中找到相关总结。

5

我对你提到的那些现成的解决方案不太了解。如果让我从头开始设计这个功能,我会用简单的JavaScript来收集点击信息,然后通过Ajax把这些信息发送回服务器(可以用你已经在用的任何JavaScript框架)。在服务器端,我只需要把这些信息追加到一个日志文件里,以便后续进行“离线”处理——这样就不需要依赖Django或者其他服务器框架了。

往日志文件里追加信息是个很轻松的操作,而用于网页的数据库通常是为了读取优化的(而不是写入优化的),所以我同意你的看法,把这些信息强行塞进现有应用的数据库里,性能可能不会很好。

撰写回答