我有20万视频,要统计每个视频的点播次数
如果每个用户点播时去更新数据库,这样数据库压力太大,而且速度慢
所以把视频点播数次放在缓存中,当这次点播时间超过上次点播一定时间时就去更新数据库。这样数据库的压力是不大,可带来另一个问题,就是统计次数的不确定,会带来延时,因为比如晚上没人点播,那最近的一次点播次数还在缓存中保存着。这样同样带来一个问题,如果这时发生比如IIS重启的话,数据都会丢失。
各位高手帮忙想想办法
后来想了下,可以设定缓存的过期时间,比如20分钟超时,在缓存移除事件中去更新统计数量,但同一时间可能会出现太多的过期,又带来压力的问题
各位出出主意
如果每个用户点播时去更新数据库,这样数据库压力太大,而且速度慢
所以把视频点播数次放在缓存中,当这次点播时间超过上次点播一定时间时就去更新数据库。这样数据库的压力是不大,可带来另一个问题,就是统计次数的不确定,会带来延时,因为比如晚上没人点播,那最近的一次点播次数还在缓存中保存着。这样同样带来一个问题,如果这时发生比如IIS重启的话,数据都会丢失。
各位高手帮忙想想办法
后来想了下,可以设定缓存的过期时间,比如20分钟超时,在缓存移除事件中去更新统计数量,但同一时间可能会出现太多的过期,又带来压力的问题
各位出出主意
能否再详细说明一下,谢谢
{
System.Timers.Timer SrvTimer = new System.Timers.Timer();
SrvTimer.Elapsed += new ElapsedEventHandler(SrvStart);
SrvTimer.Interval = 180000;//1800000毫秒
SrvTimer.Enabled = true;
}public void SrvStart(Object sender, System.Timers.ElapsedEventArgs e)
{
//在这里放入更新统计的代码;
//A.楼主可以用线程来解决压力问题 :
//B.楼主可以用ADO.NET中的事务更新来更新数据库,安全无太大压力问题,HOHO
}