我接手一个系统的二次开发,需要新增接口。
接口大致是对接一个前端的报表的实时展示:即需要实时访问数据库表的最新数据。
原系统的方案:
前端:采用js + Ajax 轮询调用 接口。
服务端接口:连接数据库(Sql Server 2012) 做查询和数据的封装返回。
我的疑问:
这种设计不会存在服务器性能与数据库性能问题吗?
js中轮询,最低要求 每秒查询一次,多个用户并发访问服务接口。
系统为内部使用,保守并发量100个考虑,
对于一个接口每秒产生100个请求与数据库连接。多个接口的话数据库连接占用更多。
另外,据我了解,数据库有多个服务访问,且都是每秒实时查询的。
既然如此,你可以在后端那些表中增删改数据的时候把前端需要的报表数据查询出来用个全局变量存起,
前端就是每秒来调用也不用去数据库查了,
保证你这个变量在数据改变的时候及时更新就是了
对于这种报表实时的更新,我的建议是使用webSocket,大致逻辑是这样的:
服务器启动websocket服务端,然后用户在打开这个报表页面的时候,就进行了socket连接,
服务器将这个socket连接的sessionId添加到一个list集合里面,再将这个list保存到服务器缓存!
如果有多个用户连接,查看服务器缓存中是否存在list,如果有,就将这个list取出来,然后将新用户的sessionId添加到list,再保存!
接下来说说怎么去触发socket进行消息发送给用户,进行实时更新!
监控做报表的那个数据库表:在有请求更新这个数据库表的时候,服务器就先保存数据,然后将最新数据取出,把存在服务器缓存的socket用户list取出,进行消息发送,消息内容就是你的最新数据报表!
这样的好处就是:实时更新,并且保证了时效,服务器性能也保证了,数据库压力没有那么大,因为只存在一个数据库连接