需求场景:
将当前人员可以查看到的列表资源导出为Excel文件
导出信息的主体包含了大量的附加数据信息,且这些附加数据信息存储在多个系统中。
实现方案
方案一:
将主体数据一次性查询出来然后遍历查询,附加数据用到一个查询一个,一次循环N次调用。最终组合完成数据
方案二:
将主体数据一次性查询,并且把关联key组装好,使用批量方法调用把数据一次性弄过来,然后通过循环的嵌套把数据组装完成
方案三:
把主体数据分段递归查询,附加数据使用第一种方案组装然后进行数据综合汇总。
方案四:
把主体数据分段递归查询,附加数据使用第二种方案组装然后进行数据综合汇总。
方案五:
把主体数据分段递归查询,附加数据使用批量接口获取,但是和方案二不同的是,在这我们不使用循环嵌套的方法,而是基于mapreduce的思想,先把附加数据转化成map结构,然后循环主体信息,通过跟主体相关的key获取到对应的数据。然后把数据综合汇总之后写入文件
方案六:
与方案五大致形同,但是获取附加信息数据的地方可以采用异步获取数据并完成map功能操作。并且每一次递归获取主体信息之后的数据可以通过追加的方式写入文件。
异步使用的是CountDownLatch
CountDownLatch示例
总结
通过上述方案介绍,毫无疑问方案六是最好的。
它的优势也是我们平时需要关注的
1、通过递归调用数据和通过追加的方式写入文件
2、通过异步获取汇总信息,减少了阻塞的风险,提升了效率
3、数据map结构化,减少了循环嵌套的爆炸式增长。减少了cpu的压力
1是为了保证内存的消耗,不造成内存溢出的风险
2和3是为了提高单次执行的效率。
内存的数据组装
最新推荐文章于 2022-08-16 15:07:26 发布