Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在网站上收集用户活动数据_Database_Design Patterns_Analytics - Fatal编程技术网

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

Database 在网站上收集用户活动数据,database,design-patterns,analytics,Database,Design Patterns,Analytics,我目前正在开发一个web应用程序,客户端希望在站点上存储有关用户活动的数据。这超出了谷歌分析所能提供的范围 我目前有一个很好的简单的数据库结构,有最少数量的表,这些表都与网站的核心功能有关 我对在数据库模式中添加大量表来记录用户活动有点不满。此外,还通过添加服务来记录用户在网站上的活动,从而搅乱了代码库 他们想要录制的内容示例如下: 现有用户的登录 用户显式注销 密码由管理员重置 用户重置/更改密码 更改用户帐户(例如授予/删除管理员权限或 配置文件更改(如果我们有配置文件) 他们可能还想录

我目前正在开发一个web应用程序,客户端希望在站点上存储有关用户活动的数据。这超出了谷歌分析所能提供的范围

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

我对在数据库模式中添加大量表来记录用户活动有点不满。此外,还通过添加服务来记录用户在网站上的活动,从而搅乱了代码库

他们想要录制的内容示例如下:

  • 现有用户的登录
  • 用户显式注销
  • 密码由管理员重置
  • 用户重置/更改密码
  • 更改用户帐户(例如授予/删除管理员权限或 配置文件更改(如果我们有配置文件)
他们可能还想录制

  • 输入到搜索表单中的搜索参数
  • 访问任何(内容)页面
  • 选择任何(内容)链接
  • 语言选择
所以我的问题是:

  • 我是否应该将此功能添加到数据库和项目中
  • 我是否应该尽可能多地分离这个,可能存储这个 分析数据在单独的数据库中,或者可能在不同的数据库中 架构,为analytical services创建单独的项目
  • 还有其他选择吗

<>我觉得记录这些数据会占用大量的代码库和数据库,而且收益很小。

< p>我至少应该考虑制作一个通用表来记录任何活动。比如:


event_id int,
event_name nvarchar(100),
event_date smalldatetime,
user_id int,
source_page nvarchar(100),
additional_info nvarchar(5000)
你可以让它涵盖我想象中的大多数用例。只是在末尾抛出一个大的文本字段,在这里您可以编写一些序列化的JSON。它只是一个可以存储一些结构化文本的blob

按照同样的思路,您可以创建一个单独的数据库来存储无模式的数据,这将更容易写入,并且如果您以后想要删除登录,就不必修改现有的数据库

还可以查看用于输入日志调用的面向方面编程。这可以保持方法非常干净,同时允许记录日志和事件。对于Java,可能是Aspect J(),对于.NET,可能是PostSharp()之类的东西


不管怎样,就像你说的,我都会实现一些占地面积小、易于删除的功能。

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

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

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

如果圆木变得这么大,你应该去走近。使用Hadoop、Hive或任何类似产品