首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跟踪用户在我的网站上花费的时间

跟踪用户在我的网站上花费的时间
EN

Software Engineering用户
提问于 2014-05-14 21:43:37
回答 3查看 1.8K关注 0票数 3

我们将跟踪用户的参与(即花费在网站上的时间,浏览系统的大部分部分/页面等)。

我不认为/ MixPanel能够做到这一点,因为我们只能根据后台的因素进行分析(比如去特定学校的用户、特定类型的用户等等)--而不是像国家、性别等一般的东西。

我可以想出一个非常简单的解决方案,但我不确定它是否是,从服务上来说,不好。你有一张桌子看起来像这样:

代码语言:javascript
运行
复制
CREATE TABLE `log` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uri` int(11) DEFAULT NULL,
  `date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `user` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后,每当加载页面时,就会将一行添加到"log“表中,其中包含当前时间戳、用户id和uri。

现在我得到了我想要的数据,这很好。我可以计算出用户最后一次上网的时间,以及人们平均花费多少分钟。

但。这对服务器不好吗?如果您有500或1000个活动用户,它将在每个页面加载一行,这是很多行。但这有关系吗?你的想法是什么?

EN

回答 3

Software Engineering用户

发布于 2015-10-08 13:18:47

服务器记录每页请求一行并不一定是坏事。然而,这里没有什么可考虑的。首先,我看到您正在使用AUTO_INCREMENT作为密钥。这将导致一些性能损失,因为您正在为它编写记录。

您可以用GUID字段替换id,并在编写行时生成GUID。

您可以进行的另一个优化是异步地进行此操作。因此,用户请求一个页面,这是您向用户提供的,当您这样做时,您会发出一个适合您的服务器端技术的请求、事件或其他任何东西,并且不会阻止发送回请求,从而真正地编写日志记录。

另一件需要考虑的事情是,您真的需要数据库中的数据吗?只需先写入日志文件并在稍后的时间将数据导入数据库可能就足够了。

票数 2
EN

Software Engineering用户

发布于 2015-10-08 14:29:39

在类似的设置中,域的一个I开发日志、页面负载和其他页内事件到Server上的日志表。它使用一个自动递增的int-PK。根据谷歌分析(GA),我们肯定看到了超过500个“活跃用户”。我们还没见过任何问题。

我认为,对我们来说,最显著的区别是,我们实际上包装了GA日志,让浏览器在GA请求的“旁边”启动一个单独的日志记录请求。这使得记录器中的任何瓶颈都不涉及实际构建页面这一更重要的问题。

但是,我不能说这对您的应用程序是否可行,因为您的应用程序可能有非常不同的服务器负载、流量模式、锁定模式等等。从表面上看,您显然使用的是不同的DMBS,而且可能是不同的服务器端堆栈.我说不出那会产生什么影响。

但是,如果您的服务器资源能够处理它,那么您想要的基本日志记录当然是可行的,而且理想的情况是,如果您将它“排除在您的核心应用程序逻辑之外”的话。

票数 1
EN

Software Engineering用户

发布于 2016-01-06 17:44:45

如果您真的认为这会造成沉重的服务器负载,请考虑将所有内容记录到NoSQL数据库中,比如MongoDB (甚至可能是纯文本/CSV文件),然后在非高峰时间执行大容量加载操作。如果加载进程是唯一写入此表的东西,则可以消除自动增量ID,并在插入之前预先生成所有ID。

这假定您不需要对这些数据进行实时访问;如果需要,那么可以考虑编写一个数据加载器,它将以受控的方式发布数据(例如,只有N行/秒,可配置)。这将防止作者淹没数据库服务器。

当然,首先要测试你的页面加载选项。这听起来是最直接的方法,不要为了解决不存在的性能问题而做大量的工作。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/239092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档