数百万用户来自数据库实时?

时间:2011-03-05 16:59:57

标签: sql

从DB中选择count(*)以计算注册用户并创建计数器实时(或几乎实时)的有效方法是什么?我不想每秒运行该查询(在mln用户上)..正在考虑运行每小时然后计算新用户并创建一个估计的计数器。跟踪访问者的事情将无法工作,但是他们来自许多网站,必须使用该用户数据库..有什么建议吗?

4 个答案:

答案 0 :(得分:5)

什么DB?例如,SQL Server和Oracle都可以在索引(物化)视图中为您维护计数。例如,在SQL Server上:

create view Metric
with schema binding
as
select count_big(*) as RegisteredUserCount 
from dbo.users
where ...;

create clustered index cdxMetric on Metric(RegisteredUserCount);

引擎会为您保持此计数的准确性,请参阅Improving Performance with SQL Server 2008 Indexed Views

select RegisteredUserCount 
from dbo.Metric with (NOEXPAND);

此外,您可以缓存此结果并获得自动失效,请参阅LinqToCache

如果您使用的是MySQL支持的系统,那么最好的方法是计算一次,将记录保存在memcached中并在注册新用户时更新它。

答案 1 :(得分:2)

由于这是经常执行的内容,我建议保留一个指标表,这些指标会随着用户的添加而更新。

Create Table Metric
    (
    RegisteredUserCount int not null Default ( 0 )
    , ...
    )

然后,您可以在Users表上创建一系列触发器,用于更新度量标准表或将其合并到用于插入/更新/删除用户的存储过程或代码中。您经常可以使用实际注册用户数对“度量标准”表中的数字进行验证检查。

答案 2 :(得分:0)

好像你只想将用户ID分配给下一个用户。在这种情况下,自动递增int / bigint不适合账单吗?

答案 3 :(得分:0)

您可以对用户进行一次计数,然后创建存储过程,这些存储过程会在删除成员时从用户计数中减去,并在添加成员时添加到该数字。我还会创建一个chron作业,按照您熟悉的计划运行,以重新计算用户表并更新您的计数器。