*架构介绍:
前端页面http请求gateway,usercore和filecore均是两个独立的dubbo服务,暴露rpc接口,gateway网关rpc请求usercore和filecore两个模块
现在有一个管理后台,后台中有一个列表,这个列表分别有这样几个字段
表格中班级编号字段和班级名称字段是从“班级表”中取得,其他字段均是从“学习时长表”、“学生表”等各个表中获取数据进行计算得来的,并且还需要根据“参与度百分比”排序
基于现有的架构,我们在usercore的模块中开发了一个service,在service中先通过mybatis请求了各个表,然后在代码中将数据汇总、计算、排序、分页,得到一个列表,然后将这个列表返回给前端,前端进行展示
现在还有一个需求,就是需要将个列表进行excel导出,由于整个列表的数据量大,导出时的文件处理非常占内存和io,所以我们设计了filecore来做文件相关的处理
但是这个地方的问题在于,由于列表中的数据需要请求多张表,然后进行计算、汇总、统计、排序等一系列复杂的操作,并且这些操作已经在usercore实现过了
难题: 1、如果在filecore做文件导出,势必需要在写一遍usercore已经有的计算统计逻辑,重复代码难维护 2、如果在usercore做文件导出,那么非常占io和内存,对usercore这样一个在线服务的压力太大 3、如果在usercore将数据查询出来,再请求到filecore,那数据的传输太大,非常占网络带宽 4、如果在usercore将数据查询出来并且存储到缓存中,再由filecore来读取并生成文件,这样对redis的压力过大,可能导出的数据有几十万,如果遇到多个人同时导出,那么压力会成倍增加
so
求解,,,感谢
有一种方法就是定时任务。
当然这个方法的前提是,这张表不需要实时计算。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。