浅谈导出Execl的报表数据解决方案

简介: 项目中免不了要做一些数据导出功能,比如导出前一天的订单记录。涉及导出功能可大可小,根据系统具体的用户量、一天的订单量等情况。今天就讨论一下怎么设计一个合理的导出功能。

项目中免不了要做一些数据导出功能,比如导出前一天的订单记录。涉及导出功能可大可小,根据系统具体的用户量、一天的订单量等情况。今天就讨论一下怎么设计一个合理的导出功能。


0x01:同步导出


这个方案最简单,就只需一个导出接口。这个接口只需实现根据用户条件到数据库查询相关数据,然后在应用程序中生成Execl电子表格,最后通过Response把生成的Execl电子表格回写到客户端即可


微信图片_20220502094553.png


该方案简单,因为是同步导出,所以不适用大量数据导出。如果使用该方案进行大量数据导出的话,存在客户端(浏览器)超时的情况,导致导出失败;因为浏览器与Nginx之间有超时设置。


0x02:异步导出


异步导出一般需要设计三个接口。


第一个接口:开启一个线程对进行数据查询,并对查询到的数据进行Execl电子表格读写操作,同步返回导出状态标识;


第二个接口:查询第一个接口的完成状态,如果完成Execl电子表格操作,则返回true;否则返回false;


第三个接口:根据第二个接口返回的状态,如果返回true,就调用下载Execl电子表格;否则返回false的话继续轮询调用第二个接口,直到返回true;


微信图片_20220502094558.png


这种方案比较耗服务器性能,因为需要第二个接口轮询应用服务器的导出状态,设置一个比较合理的轮询周期显得非常必要。另外,第一种方案和第二种方案都没有对导出的结果进行存库记录,如果要下载同样的数据,要整个流程重新走一遍。这样的话就引出第三种方案。


0x03:导出服务


该方案需要一张表和两个接口。


表的作用是用来存储谁进行了数据导出,导出的电子表格Execl存放的硬盘目录


第一个接口:开启一个线程对进行数据查询,并对查询到的数据进行Execl电子表格读写操作,最后把电子表格的目录存储到数据库;同步返回成功;


第二个接口:在导出列表中找出导出的记录,然后调用该接口进行Execl电子表格下载;


微信图片_20220502094602.png


该方案需要额外做一个管理下载记录的界面,进行下载管理;这个方案的最大好处就是对下载操作进行了记录。如果需要对相同的数据导出,只需导出一遍即可。不过增加了存储的空间,无论数据库还是硬盘,都增加了。


在实际项目中使用哪种方案,根据具体业务场景,具体选择即可。其他文件类型的导出方案也可以参考该文章的方案进行操作。

相关文章
|
7月前
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之在进行批量导出数据时,如何过滤掉视图并只导出表
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。
100 0
|
8月前
|
存储 JSON 数据库
Python中列表数据的保存与读取:以txt文件为例
Python中列表数据的保存与读取:以txt文件为例
235 2
|
6月前
|
分布式计算 大数据 Shell
MaxCompute产品使用合集之odps shell如何将ech变量的结果集合写入文件,并且指定服务器的位置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
53 10
|
8月前
|
分布式计算 资源调度 运维
在MaxCompute中,若想查看表的小文件合并时间
在MaxCompute中,若想查看表的小文件合并时间
76 1
|
SQL 存储 分布式计算
mc表在迁移导出的时候 事务表导出之后然后在导入的时候会变成非事务表,这个有办法解决么?建的时候时事务表,导出是用dw的迁移导出做的
mc表在迁移导出的时候 事务表导出之后然后在导入的时候会变成非事务表,这个有办法解决么?建的时候时事务表,导出是用dw的迁移导出做的
49 1
|
8月前
|
Cloud Native 关系型数据库 MySQL
云数据仓库ADB问一下,数据批量导入失败的有地方导出吗?
云数据仓库ADB问一下,数据批量导入失败的有地方导出吗?
67 0
|
存储 小程序 数据库
小程序导出数据到excel表,借助云开发云函数实现excel数据的保存
小程序导出数据到excel表,借助云开发云函数实现excel数据的保存
217 0
|
SQL Oracle 关系型数据库
基于变量方式实现kettle快速循环迁移表数据(八)
基于变量方式实现kettle快速循环迁移表数据(八)
387 0
基于变量方式实现kettle快速循环迁移表数据(八)
|
SQL Oracle 关系型数据库
数据泵避免个别表数据的导出
对于数据泵EXPDP/IMPDP而言,功能比普通EXP/IMP功能要强的多,因此也可以实现一些普通导出导入工具很难完成的工作。     比如今天碰到的这个问题,要导出一些表,但是其中个别表只导出结构而不导出数据。
949 0

热门文章

最新文章