>股票报价网站,实时显示股票价格
>显示“其他用户当前正在搜索的内容……”等数据
我假设这将涉及某种轮询机制,每隔几秒查询一次数据库并在网页上呈现它.但是当我从绩效的角度考虑时,这个想法让我感到害怕.
在我正在处理的应用程序中,我需要显示用户已提交的操作的实时状态.用户等待该过程完成.当操作完成时,状态由另一个进程(可以是Windows服务)更新.我应该每秒查询一次数据库以获取更新状态吗?
解决方法
正如我在评论中提到的,在某些情况下,您可以通过动画伪造状态更新的外观来获得很多好处,例如,使用估算,不经常检查数据源.
编辑
(优化使用更少的db资源实时)
不是每个用户轮询数据库以每X秒检查一次作业状态,而是略微改变情况的行为.每次将作业添加到数据库时,请读取数据库一次,以将有关所有作业的元数据放入缓存中.因此,内存缓存将反映[user49 … user3,user2,user1,userCurrent] 50个用户的作业(如果每个作业1个). (也许我应该把它写成[job49 … job2,job1,job_current]但同样的想法)
然后,各个用户的网页将轮询始终保持最新的缓存.在此示例中,db仅在缓存中读取50次(每个作业提交一次).如果这50个用户平均等待1分钟进行作业处理并每秒轮询一次状态,则用户群总共轮询缓存50个用户x 60秒= 3000次.
在50分钟的时间内,这是50个数据库读取而不是3000个. (平均每分钟一个.)缓存总是新鲜的,但处理负载.它比考虑每个用户每秒点击数据库要小得多.您可以在缓存中存储其他统计信息和信息,以帮助进行估算等.只要新缓存提供更高的效率,它就是大规模数据库命中的可行替代方案.
注意:通过缓存,我指的是像Application或第三方解决方案这样的全局存储,而不是快速超出范围的ASP.NET页面缓存.使用ASP.NET机制进行缓存可能不适合您的情况.
另一个注意事项:db将知道何时附加另一个作业记录,无论从哪里开始,因此触发器可以初始化缓存更新.
尽管有一个很好的数据库解决方案,但是很多用户经常轮询可能会产生Web服务器连接问题,并且您可能需要在该级别使用不同的解决方案,具体取决于流量.