首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跟踪一段时间内登录的用户数-数据库设计

跟踪一段时间内登录的用户数-数据库设计
EN

Stack Overflow用户
提问于 2010-11-12 20:01:36
回答 3查看 809关注 0票数 1

在我们的应用程序中,我们存储了最多的在线用户。我们通过跟踪每个用户当前所在的页面来做到这一点,在登录时,删除处于非活动状态X分钟的用户,然后对在线用户进行计数,如果该值更高,则覆盖最大的在线用户数量。

我们如何改变这一点以跟踪一段时间内的在线用户数量,以便我们可以查看在线用户数量的折线图。我猜我们需要一个cron来每隔1/2/5/10/20/30/60分钟运行一次来跟踪在线数字?那么如何存储这些数据,表会变得非常大。我认为像Statcounter/Analytics这样的公司会有更好的方式来存储这些数据。

如有任何建议,我们将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-12 20:10:34

没有办法在更小的空间中存储它。如果你有很长一段时间,你就有一定数量的数据。这取决于登录的数量和间隔的长度,是更好地存储登录还是用户计数的样本。

只需以您需要的最高采样率存储它,很容易在以后按小时对其进行分组:

代码语言:javascript
运行
复制
SELECT YEAR(sample_datetime),
       MONTH(sample_datetime),
       DAY(sample_datetime),
       HOUR(sample_datetime),
       AVG(user_count)
FROM stats
GROUP BY 1,2,3,4
票数 1
EN

Stack Overflow用户

发布于 2010-11-12 20:06:06

我们有一个存储登录信息的表,所以我们有一个user_id列和一个login_time列。

但是,您可以将其扩展到涵盖您的会话,并在会话结束时存储一个login_timelogoff_time。这样,您就可以使用一个简单的SQL查询来计算某个时间范围内的会话数量,例如:

代码语言:javascript
运行
复制
SELECT COUNT(*) AS count
FROM sessions
WHERE login_time <= '$yourTime'
AND logoff_time >= '$yourTime'

看看会话自定义处理程序上的http://www.php.net/manual/en/session.customhandler.php

票数 0
EN

Stack Overflow用户

发布于 2010-11-12 20:27:16

正如您已经提到的you,您必须将时间/值对存储在某个地方,可能是在数据库表中。您所需要的就是在线用户的日期/时间和值(一个有2列的表)。

数据点的数量将取决于您想要查询计数器的频率。通常,我不认为轮询频率超过您的不活动阈值是有用的-如果您认为用户在10分钟后不活动,我不会超过每10分钟轮询计数器的频率。

尽管数据量对于大多数数据库来说应该不是问题,但您可能会对感兴趣,或者至少对它的概念感兴趣。我们的想法是,上周有一个非常详细的计数器(每10分钟一个数据点),上个月有一个不太详细的计数器(每4小时),最后一年有一个更详细的计数器(每天),依此类推。以这种方式设置,您在任何时刻都有固定数量的数据点。

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

https://stackoverflow.com/questions/4164380

复制
相关文章

相似问题

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