0

如果您拥有一百万用户的游戏用户群,但只希望有十几个用户同时登录,那么如何最好地构建事物以便您可以在您的网站上显示活跃用户的数量?你不想(我认为)做一个幼稚的SELECT count(*) FROM users WHERE logged_in = 1

4

2 回答 2

1

我会维护一个logins表,每当用户登录时添加到该表中,当用户注销时,删除该条目。该表也可能有一个到期时间,因此您可以考虑登录超时和查询,例如:

SELECT COUNT(*) FROM dbo.Logins WHERE LoginExpiry < GETDATE()
于 2012-11-08T17:18:10.643 回答
0

两件事情。首先,在logged_in列上放置一个索引。其次,我假设这只是一个错字(缺少选择列),如果您只需要一个计数,这就是您的查询:

select count(*) from users were logged_in = 1

可以保留一个单独的统计表来跟踪您想要快速访问的任意数量的聚合。这根本不是一个坏主意。但是,添加索引应该让这个特定的查询非常快。一旦您开始需要定期报告其他汇总用户统计信息,请为此目的构建统计信息表。

请记住,如果/当您走这条路时,您的统计数据表通常会非常简单:

stat_id : int
name : varchar
int_value : int
float_value : float

然后,每次登录只需要...

update stats set int_value += 1 where name = 'logged_in_users';

并且每次注销都需要...

update stats set int_value -= 1 where name = 'logged_in_users';

并且可能是一项自动注销用户并定期“重建”统计数据表的工作。

于 2012-11-08T17:18:34.780 回答