我目前正在开发一个Web应用程序,客户端希望在网站上存储用户活动的数据。这超出了Google Analytics可提供的范围。
我目前有一个很好的简单数据库结构,其中最少数量的表都与网站的核心功能相关。
我有点不愿意在数据库架构中添加大量表来记录用户活动。并且通过添加服务来记录网站上的用户活动,使代码库变得混乱。
他们想要录制的内容包括:
他们可能也想录制
所以我的问题是:
我只是觉得记录这些数据会使代码库和数据库变得庞大,并且获得的收益很少......
答案 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)。
无论如何,就像你说的那样,我会实现一些占用空间小的东西,可以轻松移除。