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