在网站上收集用户活动数据

时间:2013-02-05 17:25:30

标签: database design-patterns analytics

我目前正在开发一个Web应用程序,客户端希望在网站上存储用户活动的数据。这超出了Google Analytics可提供的范围。

我目前有一个很好的简单数据库结构,其中最少数量的表都与网站的核心功能相关。

我有点不愿意在数据库架构中添加大量表来记录用户活动。并且通过添加服务来记录网站上的用户活动,使代码库变得混乱。

他们想要录制的内容包括:

  • 现有用户登录
  • 用户显式注销
  • 密码由管理员重置
  • 密码重置/用户更改
  • 更改用户帐户(例如,授予/删除管理员权限或 如果我们有个人资料,则会更改个人资料)

他们可能也想录制

  • 搜索参数输入搜索表单
  • 访问任何(内容)页面
  • 选择任何(内容)链接
  • 语言选择

所以我的问题是:

  • 我应该只将此功能添加到数据库和项目吗?
  • 我应该尽可能地分开这个,可能存储这个 分析数据在单独的数据库中,或者可能在不同的数据库中 架构,为分析服务创建一个单独的项目。
  • 还有其他选择吗?

我只是觉得记录这些数据会使代码库和数据库变得庞大,并且获得的收益很少......

2 个答案:

答案 0 :(得分:1)

将此功能添加到您的项目中。但不要进入你的数据库。 而是将其存储为日志。

我从不喜欢将它放入数据库(尤其是生产数据库)中,因为对该数据库的任何查询都会影响您的系统性能。

但是,您还需要创建批处理作业来读取此日志,并从中生成任何必要的数据。

如果日志变得如此之大,您应该转到Map Reduce方法。使用Hadoop,Hive或任何类似产品。

答案 1 :(得分:0)

我至少会考虑制作一个通用表来记录任何活动。类似的东西:


event_id int,
event_name nvarchar(100),
event_date smalldatetime,
user_id int,
source_page nvarchar(100),
additional_info nvarchar(5000)

你可以覆盖我想象的大多数用例。只是想在最后编写一个大文本字段,你可以编写一些序列化的JSON。它只是一个可以存储一些结构化文本的blob。

沿着这些方向,您可以创建一个单独的数据库来存储无模式数据,这样可以更容易写入,如果您以后想要删除注销,则不必修改现有数据库。 / p>

同时检查面向方面的编程以进行日志记录调用。这可以使您的方法非常干净,同时允许记录和事件。对于Java可能是Aspect J(http://eclipse.org/aspectj/),对于.NET来说就像PostSharp(http://www.sharpcrafters.com/aop.net)。

无论如何,就像你说的那样,我会实现一些占用空间小的东西,可以轻松移除。