2013-02-05 35 views
2

我目前正在开发一个Web应用程序,客户想要在网站上的用户活动周围存储数据。这不属于Google Analytics可以提供的范围。在网站上收集用户活动数据

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

我有点吝啬在添加大量表到数据库模式来记录用户活动。通过添加服务来记录用户在网站上的活动,也会使代码库变得泥泞。他们想记录什么

的例子是:

  • 登录现有用户
  • 明确注销由用户通过管理员
  • 用户的
  • 变化
  • 密码重置/更改
  • 密码重置用户帐户(例如授予/删除管理员权限或 个人资料更改,如果我们有个人资料)

他们可能还需要记录

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

所以我的问题是:

  • 我应该只是将此功能添加到数据库和项目?
  • 我是否应该尽可能将其分开,可能将此分析数据存储在单独的数据库中,或可能在不同的 模式中为分析服务创建单独的项目。
  • 是否还有其他选择?

我只是觉得记录这些数据会批量代码库和数据库,并且只有很少的收获......。

回答

1

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

我从来不喜欢把它放入数据库(特别是你的生产数据库)的想法,因为对这个数据库的任何查询都会影响你的系统性能。

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

如果日志变得这么大,你应该去Map Reduce的方法。使用Hadoop,Hive或任何类似的产品。

0

我至少会考虑制作一个通用表来记录任何活动。像这样:

 

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

你可以使覆盖大多数情况下,我会想象。只是一个想法,可以写一个大的文本字段,你可能会写一些序列化的JSON。这只是一个可以存储一些结构化文本的blob。

沿着这些相同的路线,您可以创建一个单独的数据库来存储无模式数据,这将更容易写入,并且如果您以后想要注销注销,则不必修改现有数据库。

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

无论如何,如你所说,我会实现一个小脚印,可以很容易地删除的东西。

相关问题