对于庞大的数据,Grails Excel导入失败

我正在使用grails 2.3.7和最新的excel-import插件(1.0.0)。 我的要求是,我需要将Excel表格的内容完全复制到数据库中。 我的数据库是mssql server 2012。

我已经得到了开发版本的代码。 当logging数很less或可能达到几百个时,代码工作正常。

但是在生产中,Excel表格将有多达50,000行和超过75列。

最初我遇到了一个内存exception的数据。 我把堆大小增加到了8GB,但是现在线程一直运行着,没有终止。 没有错误产生。

请注意,这是一次性的操作,由一个确保这个操作不妨碍其他操作的人来执行。 所以需要担心这个操作的巨大负载。 我能负担得起它。

当logging数达到10000时,相同数量的列将在5分钟左右复制数据。 如果现在我有5万行,那么所花费的时间理想情况下应该是大约5倍左右,即大约25分钟。 但代码保持运行一个多小时而没有终止。

任何想法如何去解决这个问题。 任何帮助,高度赞赏。

如果你在内存中加载5倍以上的数据,并不总是多花5倍。 我猜大多数的8GB是在虚拟内存和虚拟内存是非常缓慢的硬件。 尽量减less内存,运行一些内存testing,尽量使用内存。

根据我的经验,在Grails中大批量操作的正常问题。 我认为你有内存泄漏,从根本上放慢了操作的进展。

我的解决scheme是使用诸如Pentaho Kettle之类的ETL工具进行导入,或者将导入块导入可pipe理的块中。 看到这个相关的问题:

在grails中插入10,000,000多行

在技​​术上不是你的问题的答案,但你有没有考虑过使用CSV而不是Excel?

从用户的angular度来看,导入之前保存为CSV并不是很多工作。

我正在加载,validation和保存CSV 200到300 000行,没有一个困难。 只要确保你有一个服务的逻辑,所以它把一个交易。

更多的代码可能会解码csv,特别是要翻译成各种原语,但它应该是更快的数量级。