手把手教你实现超大数据量带进度条导入导出功能(二导出篇)

本文介绍如何实现超大数据量的带进度条导出功能,以10000000手机号数据为例,分析需求,提出分批查询数据库生成数据文件的策略,并展示前后端代码改造过程,最后总结了超大数据导出的关键点。
摘要由CSDN通过智能技术生成

概述

对于超大数据量的导出是一个长耗时的操作。在没有进度条情况下,当用户点击导出后,页面长时间得不到反馈,导致用户不清楚是导出出现问题,还是导出正在进行处理还未结束。所以,为超大数据量的导出添加进度条功能显得尤为必要。

下面以导出10000000手机号数据为例,开发带进度条的导出功能。

需求分析

  1. 进度条分析

文件的导出有两个阶段,一是查询数据库生成数据文件;二是数据文件下载。对于数据文件的下载各大浏览器都可以很好的显示下载进度,不需要添加进度条。所以,进度条展示的是一阶段查询数据库生成数据文件的进度,对于超大数据量生成文件的过程会持续很长的时间,此处使用进度条展示非常合适。

  1. 超大数据量导出查询数据分析

对于超大数据量的查询采用的基本方案为,先查询总数据量数,根据设置每次查询条数计算出需要查询的次数,然后分页查询将查询结果动态写入数据文件,在将数据文件以流的形式输出给浏览器。

传统方式导出开发

传统方式不使用进度条展示导出进度,导出效果如下:

在这里插入图片描述

  1. 页面代码如下:
<form action="download" method="post">
    <input type="submit" value="导出">
</form>
  1. Java后端导出处理,代码如下:

其中导出文件暂存/tmp目录下

public void download() throws IOException {
    final String fileName = UUID.randomUUID().toString().replace("-","");
    try (final FileWriter fileWriter = new FileWriter(new File("/tmp/" + fileName + ".csv"));
         final BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);){
        final long totalNum = remoteGetUserNum();
        final long pageSize = 100L ;
        long totalPage = (totalNum%pageSize == 0L) ? totalNum/pageSize:(totalNum/pageSize + 1);
        for (long pageNum = 1L; page
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值