哪个最好处理大型excel文件,apachi poi,spring batch或其他? [关闭]

问题描述 投票:0回答:2

在我的情况下,用户将上传一个大型的excel文件(xls,xlsx),其中至少包含1万条记录,以后可以增加。我必须验证上传的文件并将数据保存到多个表中。使用apache poi或spring batch或技术上具有良好性能,数据完整性的任何其他技术最好?请帮助我,我是春天的新手。

java spring-batch
2个回答
0
投票

进行此操作的方法是先集中精力杀死您的图书馆:图书馆。例如,您需要验证文件。您是否需要遍历工作簿中的每张纸?然后,您需要一个可以将工作簿保存在内存中的库来快速完成工作。如果该库必须为每个工作表进入磁盘,它将变得很慢,但占用的内存较少。

之后,您需要将从工作簿中提取的数据发送到存储。如果需要从磁盘读取,则存储将花费一些时间。

您需要找出最小化I / O,磁盘或网络的方法。春天不能为你做到这一点


0
投票

Apache POI最适合通过不同的用户界面或API读取excel文件并将内容显示给用户。它可能无法提供批量更新到数据库所需的高吞吐量。

通常仅由数据库提供将数据从excel文件复制到数据库的最佳性能解决方案。

例如,对于MySQL,SQL语句'LOAD DATA INFILE'提供了最佳的解决方案。因此,编写执行LOAD DATA LOCAL INFILE语句的Java服务将为MySQL DB提供最佳性能。

这里要注意的重点是LOAD DATA LOCAL INFILE语句仅适用于.CSV文件,不适用于Excel文件。

因此,获得最佳负载性能的技巧是采用以下选项之一:

选项1:接受.CSV文件而不是.xls / .xlsx文件作为输入。在.csv文件上运行LOAD DATA INFILE

选项2:如果输入仅是.xls / .xlsx,则首先将excel文件转换为csv格式,然后在.csv文件上运行LOAD DATA LOCAL INFILE语句。

这里是来自Java程序中Apache POI的链接,该链接将Excel文件转换为CSV:

https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java

这里是运行LOAD DATA LOCAL INFILE语句的Java程序的链接:

http://www.java2s.com/Code/Java/Database-SQL-JDBC/LoadingaFlatFiletoaMySQLTablefileisterminatedbyrnusethisstatement.htm

© www.soinside.com 2019 - 2024. All rights reserved.