各位: 在我们的项目中,有一个模块不定时向数据库中插入数据,在另外一个模块中客户要求尽可能实时的响应数据插入,提醒用户做出处理。 我们目前的作法是这样:在首页中利用javascript定期刷新某个页面,在这个页面中访问数据库,看是否有新的数据,如果有新的数据,就弹出一个页面供用户处理。 在多个用户同时访问的的情况下,如果设置刷新页面的间隔较短,由于每个首页都定期刷新页面,造成频繁访问数据库,导致程序运行非常慢;如果设置刷新页面的时间较长,实时响应又难以做到。 不知道要保证系统的实时响应,又不至于导致运行速度缓慢,有没有好的办法和方案? 谢谢!
原因:如果有100个,200个客户端一起开着IE浏览, 那DB不是完了....解决方法(只是提议,没仔细考虑可行不可行):
IIS那端运行一个线程,此线程每几秒去DB获取一次数据。
所有客户端刷新去取新数据全部取这个线程已经取到的数据集。这样不管有多少个客户端开着,每几秒只会有一次访问DB。
不过原理一样, AP SERVER那里运行一个线程,
此线程每几秒去DB获取一次数据。把数据保存在Application级别的Cache中或则某个class的static变量里。 (不要保存ResoultSet, 因为Connection关了就没了。)
2:用户登陆后记录状态并分配cache
3:把更新部分记录索引放在各用户cache中
4:可以用ajax或其他技术根据cache内容,从内存取的更新记录,更新页面
5:监听session, 撤消过期或者登出用户,并清除其cache
后来想了想,基本思路和sozdream() 所说的一样。
就是用在服务器端运行一个线程,延时查询数据库,然后更改application的某个属性,或者修改一个配置文件,然后客户端延时查询application或是配置文件就OK了。
应该比楼主现在的方法节省资源。