在 Java 应用程序中处理大量输入数据

Posted

技术标签:

【中文标题】在 Java 应用程序中处理大量输入数据【英文标题】:Handling large Input data in a Java Application 【发布时间】:2012-04-09 17:03:04 【问题描述】:

我有一个 Web 应用程序,我需要从 Excel 格式的文件中输入大量数据——比如 10,000 行和 200 列。然后我需要处理这些数据,然后从数据库中插入/更新/删除。

我尝试过将所有内容都放在 java 代码应用程序中,但结果太慢了。

有人可以提出更好的方法吗?注意我没有将这些数据放入某些类或对象中。我只是在处理和更新数据库。

【问题讨论】:

你的问题似乎有点模糊,看起来更像是工作转储而不是其他任何东西。如果您展示了您所拥有的什么,这将有所帮助,否则您的问题非常很难回答。 为什么太慢了。 文件中有什么 【参考方案1】:

我建议您使用流技术。使用 Apache Commons FileUpload: http://commons.apache.org/fileupload/streaming.html

然后一个一个地处理记录,这样你就不会分配内存。需要考虑的事项:如果您的流程在中间中断会发生什么?如果这对您很重要,请使用事务。不幸的是,我无法为您提供有关阅读 XLS 格式的提示,但如果您可以使用 CSV,事情会变得更简单 - 用于此的库很少。

您可以微调 FileUpload 以将数据存储在内存、磁盘或组合中。或者您可以相信它会做正确的事情。

【讨论】:

【参考方案2】:

不清楚您的应用程序中发生了什么:您是在与用户输入(上传)进行交互,还是只是在初始化应用程序?如果是后者,数据更新当然可以在安装应用程序时完成一次,而不是在请求阶段。如果是前者,则取决于很多因素:如何读取数据?文件 IO 可能非常慢;你如何更新数据库? - 使用存储过程?或者只是简单的 JDBC SQL 子句。如果整个过程似乎太慢而无法完成,也许某种后台线程会更好。

【讨论】:

以上是关于在 Java 应用程序中处理大量输入数据的主要内容,如果未能解决你的问题,请参考以下文章

在Android中处理非常大量数据的好方法是啥?

如何在 C#with MySQL 查询中处理大量数据?

处理固定数据表中的大量数据

直接在数据库上处理大量数据是个好主意吗?

Java优先队列(PriorityQueue)示例

java web开发 高并发处理