大数据量导出的设计总结

背景

目前做的一个系统中有多个业务功能存在数据导出的功能,而且以对账明细导出为例,一般一个区县级税务机关下的某个属期的所有入库明细数据可能达到100多万,

由于数据量过大,且现有实现方式不合理,容易出现由于导出数据过多造成的“内存溢出”问题,并且由于现有导出是同步方式,处理时间相对较长,导致 WEBLOGIC 服务器监控到线程执行时间过长 从而产生 预警。

为了避免此类问题,现有实现加了个配置项,当导出数据量大于该配置项时,不允许导出,但实际使用场景中,有不少的用户需要导出大于该配置项的数据,此类需求现在无法满足。

分析

针对上述所列两个问题:

内存溢出

原因

原有导出文件方式,实现方式为采用JPA native sql 方式一次性从数据库获取所有数据,一次性将所有数据转换为DTO,一次性将所有DTO通过 POI组件 生成Excel。

这种方式下,由于生成文件过程中的所有对象都存在依赖关系,所以内存无法回收,随着数据量增多,非常容易出现内存溢出。

解决方法

采用分批方式,从读取数据,转换对象,到生产 excel , 使用分批 读取 分批 转换,分批生成的 方式,每一批处理完成,对象依赖关系即解除,对象即可释放,所以此种模式下不管读取多少数据量,不可回收内存占用几乎不变,不会随着数据的增多而不可回收内存线性增多。分批读取有如下几种方式:

  1. 通过rownum 分页
    即根据 rownum 第一批 获取 1-100条,第二批过去 101-200条。
    此方式有如下问题:
    1. 如果存在数据变动,此方式可能存在 不同页 有相同数据的情况, 比如先 获取 0-100的第一页数据,此时发生了数据更新,在最开头新增一条数据,当导出101-200的 第二页数据时,第101条数据和第一页数据相同。
    2. 另外,如果数据量过大,rownum 的模式存在 当分页越到后面,效率越低的问题。
  2. 通过业务字段分批查询
    通过业务字段分批查询,比如以入库明细为例,第一批导出编号为1到100的所有人的数据,第二批导出编号为101到200的所有人的数据。
    由于原本数据导出时会基于不同查询条件,组合条件较为复杂,所以直接转化为通过业务字段分批查询时 查询 效率会比较低下,并且难以通过增加索引方式提高效率。
  3. 一次性查询所有,通过ResultSet游标获取部分数据的方式
    此方式下,不再使用 JPA native SQL 方式,而是最原始 JDBC 游标处理方式,通过遍历 ResultSet 的方式,当遍历到一定数量后(比如100),转换为 DTO 并做后续的Excel生成。
    由于需要一次性查询,并且边查询边生成,在excel生成完成前,数据库连接一直没有释放。

鉴于前两种方式的存在的效率问题,使用第三种一次性查询的方式。由于数据库连接长时间不释放,超过防火墙 TCP 空闲限制时间会造成连接中断,需确保此种生成方式能在规定时间内完成查询(一般为1小时,查询到数据在一小时内即可,查询到数据,返回数据时 TCP 连接不会空闲,所以不会再断开)。

 

处理时间过长

原因

处理时间分为两部分,第一部分为查询,第二部分为处理,随数据量增大,查询和处理时间都会线性增长,处理时间不可控,必须转为异步处理模式。

解决方法

  1. 用户在前台查询后点击导出,根据数据量判断是否大于最大导出上限
    1. 如果小于等于上限,直接按原有模式,直接同步导出;
    2. 如果大于上限,提示文件在生成中,稍后去页面获取并下载;
  2. 定时任务处理导出任务,生成文件;
  3. 新增查询界面,页面显示文件生成进度,如果生成完成,提供下载链接 允许用户下载;
  4. 未避免服务器上文件堆积,定期清理文件,每天清理一次3个月前的数据;

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Excel数据看板模板是一种可视化的数据分析工具,用于将复杂的数据整理、呈现和分析。它可以将大的数据以图表、表格、图像等形式直观地展示,帮助用户快速了解数据的趋势、关联和异常。 Excel数据看板模板通常包括以下几个主要部分: 1. 数据输入区域:用于输入和更新数据的区域,用户可以根据需要自定义数据的输入方式和格式。 2. 数据分析区域:通过各种计算公式和函数对输入的数据进行分析和处理,例如平均值、总和、百分比等。 3. 图表区域:用于展示数据的可视化图表,如柱状图、折线图、饼状图等。用户可以选择合适的图表类型来展示不同的数据关系和趋势。 4. 指标区域:用于展示关键指标或目标的实时数值,可以通过条件格式和数据透视表进行灵活的设置和调整。 5. 仪表盘区域:通过仪表盘图表展示数据的整体情况和变化趋势,如速度表、指针图等。 使用Excel数据看板模板可以带来以下几个好处: 1. 可视化信息:通过图表和图像的形式展示数据,更直观地了解数据的情况和趋势。 2. 快速分析:通过预定义的公式和函数,可以快速对数据进行计算和分析,提高分析效率。 3. 灵活性和可定制性:模板可以根据用户的需求进行灵活的设置和调整,以适应不同的分析要求。 4. 数据共享和报告输出:可以将数据看板模板导出为报表或分享给他人,方便数据的共享和反馈。 综上所述,Excel数据看板模板是一种实用的数据分析工具,通过可视化展示和快速分析数据,帮助用户更好地理解数据,做出有针对性的决策。 ### 回答2: Excel数据看板模板是一种可视化展示数据的工具,适用于各种数据分析和报告需求。它提供了一个组织有序的布局,将大数据呈现为易于理解的图表、表格和指标,使用户可以快速、直观地了解数据情况。 一个好的Excel数据看板模板应包含以下几个要素: 1. 数据源连接:通过连接外部数据源,如数据库、API或其他文件,实现数据的自动更新和实时展示,避免手动输入和更新数据的麻烦。 2. 数据透视表与图表:透视表可以帮助用户根据需要对数据进行分组、过滤和汇总,以便更好地理解数据的结构和特点。结合柱状图、折线图等图表形式,可以更直观地展示数据的趋势和变化。 3. 简洁明了的布局:合理的布局可以提高信息的可读性和易理解性。通过合理安排不同的模块和区域,避免信息的混乱和重叠,使用户在一眼就能找到所需信息。 4. 数据指标和KPI:通过设定关键绩效指标(KPI),用户可以随时了解数据达成情况。这些指标可以是有关销售额、利润、成本、用户数等关键数据的计算结果,用以衡业务的健康状况和发展趋势。 5. 筛选和交互功能:提供筛选器和交互式功能,可以按需选择特定数据集,实现数据的动态展示和对比分析。这样用户可以根据自己的关注点,通过调整筛选条件来探索不同的数据视角。 综上所述,Excel数据看板模板是一种通过可视化展示数据,使用户能够直观、简单地了解数据情况的工具。通过适当的布局、图表、指标和交互功能的设计,可以帮助用户更好地理解数据,做出准确的决策。 ### 回答3: Excel数据看板模板是一种用于可视化和分析数据的工具。它提供了一种简单而直观的方法,将大数据以图表、表格和指标等形式展示出来,帮助用户理解和监控业务状况。 首先,Excel数据看板模板具有灵活性和可定制性。用户可以根据自己的需求和喜好,选择合适的表格样式、图表类型和指标设置。这使得看板能够适应不同行业和业务场景,并满足各种数据分析需求。 其次,Excel数据看板模板具有易于使用和操作的特点。无论是新手还是有经验的用户,都能够快速上手并进行数据监控和分析。用户只需输入或导入数据,然后按照模板的数据布局进行填充和编辑,即可生成看板报表。 此外,Excel数据看板模板还具有数据更新和实时监控的功能。用户可以将数据与外部数据源连接,使得看板能够实时更新数据。这对于需要经常关注和分析数据变化的用户来说,非常有用。 最后,Excel数据看板模板还支持数据导出和共享。用户可以将看板报表导出为Excel文件或图像文件,方便在其他平台或设备上查看和分享。此外,用户还可以将看板共享给其他用户,共同进行数据分析和决策。 总结而言,Excel数据看板模板是一个强大而实用的数据分析工具。它能够帮助用户清晰地呈现、分析和监控数据,提供决策支持和业务优化的依据。无论是个人还是企业,都可以通过使用Excel数据看板模板来提高数据分析的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值