现在接手一个java项目 批量导入模块,需提供jsp页面上excel导入功能 求设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现在接手一个java项目 批量导入模块,需提供jsp页面上excel导入功能 求设计相关的知识,希望对你有一定的参考价值。

现在接手一个批量导入模块,需提供jsp页面上excel导入
excel中数据需做有效性校验(数据格式),重复校验,重复个数校验等四五种校验,校验时的关联查询表有两个,视图一个,数据量都为亿级,
向数据库插入数据时部分字段为excel中数据,部分为页面传至后台数据,导入完毕后返回页面需显示导入数据条数,成功条数,失败条数,并给出失败记录下载链接,供用户导出
已确定excel中数据量为10万以下,
我现在的做法是在java代码中逐条校验,然后将校验成功的数据根据校验结果插入数据库中不同的表,校验失败的数据及失败原因等插入失败记录表,
现在我导入6000条数据时就需要4分钟左右,严重影响效率

现在我的思路有两个:
一个是读excel后后台起多线程来校验数据格式并批量插入excel中数据至临时表,完毕后再来做联合查询查出无效数据条数,并再起多个线程来分别将有效的数据导入对应的表,无效的数据导入失败记录表

第二种是在后台将excel文件转为csv格式并生成sqlloader控制文件,然后调用Sqlldr 命令将数据全导入临时表,然后再起多线程来做数据的校验工作及导入工作

系统平台为linux 服务器为jboss
页面等待时间必须控制在一分钟以内,最好在20秒内能完成,不知哪种方法更有可行性,或者有牛人能提出更好的方案就万分感谢了

第二种方法我只是在网上看到这方面的资料,从没用过,不知可行性如何

先说时间吧。

一分钟以内,最好在20秒内能完成
这个是指多少条记录?亿?还是6000?
假设是六千的话,那么一秒钟就要处理100条。
第一种方法,我觉得你起了多线程效果也不会差太多。线程也是要耗内存的。线程多了一样慢。

你所说的 6000条数据时就需要4分钟左右 这个包不包括上传文件的时间?

你将工程分成几个步骤可不可以?
1.上传文件(数据是不是要添加到临时表中,你来决定),完成后显示一个页,就是你要传给后面的另一部分数据。
2.确认这部分数据后,提交,进行数据的处理。

这样分开的好处就是每一步的时间都会短一些,不把时间集中在一起。
还有就是你可以在文件上传完以后,在后台起线程来处理数据,用户看第二个页的时候,你已经在处理数据了,这样也可以减少一部分时间。

至于你说的第二个方法,我虽然没有做过,但知道可行。
不过,时间应该也短不了,因为你又要读EXCEL,又要写文件,这都是比较耗时的。
参考技术A 我以前做MSSQL的时候是把excel直接导入数据库的再处理的,用程序写太麻烦,你是用Oracle?不知道有没有这功能.用程序处理excel其实和处理文本差不多,效率肯定不行的.何况还要校验.

导出倒不难,把数据做成html的table格式,扩展名改成xls就可以用excel打开了.追问

直接导入数据库是不可能了 因为这个是项目需求 客户需要这样一导入功能 项目上线后这部分的操作人员不直接操作数据库
我考虑的是仅仅开多线程未必能很有效的把效率提起来

追答

那你就跟客户说明好了.就说数据多了导入肯定会慢.而且要实现恐怕得在服务器端做一个组件或程序来完成,用网页搞不好响应会出问题.要实现是比较麻烦一些.

以前做项目的时候也想过把excel直接导进数据库的,不过处理起来比较麻烦,客户也没这要求,最后都上传做附件了.

参考技术B 怎么做的,兄弟分享一下,我也正在做这个功能 参考技术C 你怎么做的啊?能不能给我邮箱(392323642@qq.com)发个简单的例子?,让小弟学学! 参考技术D 我现在做的也是这样的功能,但是还无从入手,可以把你的整个流程页面,给我发一下吗?谢谢啦~我邮箱541112875@qq.com

以上是关于现在接手一个java项目 批量导入模块,需提供jsp页面上excel导入功能 求设计的主要内容,如果未能解决你的问题,请参考以下文章

Node.js模块

表格批量导入

ES6模块化

Vue.config.js 配置 moment.js按需导入

eclipse报错Dynamic Web Module 3.0 requires Java 1.6

[vue]js模块导入导出export default