首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grails Excel导入海量数据失败

Grails Excel导入海量数据失败
EN

Stack Overflow用户
提问于 2014-11-07 16:28:47
回答 3查看 448关注 0票数 1

我使用的是grails 2.3.7和最新的excel导入插件(1.0.0)。我的要求是,我需要将excel工作表的内容完全复制到数据库中。我的数据库是mssql server 2012。

我已经得到了开发版本的代码。当记录数很少或可能高达几百条时,代码工作得很好。

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

最初,我遇到了一个数据内存不足的异常。我将堆大小增加到8 8GB,但现在线程继续运行,不会终止。不会生成任何错误。

请注意,这只是一次操作,将由确保此操作不会妨碍其他并行运行的操作的人员执行。所以需要担心这个操作的巨大负载。我能负担得起运营它。

当记录数量达到10,000个且列数相同时,数据大约在5分钟内被复制。如果我现在有50,000行,那么理想情况下所用的时间应该是5倍左右,也就是大约25分钟。但代码持续运行了一个多小时,没有终止。

任何关于这个问题的想法。任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2014-11-07 17:04:03

如果在内存中加载5倍以上的数据,并不总是需要5倍以上的时间。我猜大部分8 8GB的内存都在虚拟内存中,而虚拟内存在硬件上非常慢。尝试减少内存,运行一些内存测试,并尝试尽可能多地使用RAM。

票数 0
EN

Stack Overflow用户

发布于 2014-11-07 17:16:35

根据我的经验,Grails中的大型批处理操作是一个常见的问题。我认为你有内存泄漏,这从根本上减慢了操作进行的速度。

我的解决方案是使用ETL工具进行导入,或者将导入分成可管理的块。请参阅此相关问题:

Insert 10,000,000+ rows in grails

票数 0
EN

Stack Overflow用户

发布于 2014-11-07 18:20:43

从技术上讲,这不是你的问题的答案,但你有没有考虑过只使用CSV而不是excel?

从用户的角度来看,在导入之前另存为CSV并不是一项很大的工作。

我正在加载,验证和保存CSV与200-30万行没有任何问题。只需确保您在服务中具有逻辑,这样它就可以围绕它进行事务处理。

可能会有更多的代码来解码csv,特别是转换成各种原语,但它应该快几个数量级。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26797077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档