Java-将大量数据写入csv

标签 java performance csv supercsv

我只是想通过使用 supercsv 来写入从 mysql 数据库获取的大量数据到 CSV。我可以多么简单地管理性能问题。 super csv 写入有一些限制吗?

最佳答案

由于您在问题中几乎没有包含有关如何解决问题的详细信息,因此很难提出具体的建议。所以,这是一个一般性的:

除非您将文件写入速度非常慢的介质(某些旧的 USB 内存棒或其他东西),否则过程中最慢的步骤应该是从数据库读取数据。

构建程序的一般方法有两种:

  1. 方式:首先将数据库中的所有数据读取到应用程序的内存中,然后在第二步中将其全部写入 csv 文件。
  2. 正确方式:将数据从数据库“流式传输”到 csv 文件中,即在数据进入您的应用程序时将数据写入 csv 文件(逐条记录或逐批记录) )。

这个想法是建立通常称为“管道”的东西。可以将其想象为工厂中的传送带构造:组装某些小部件的过程中有多个步骤。您不想做的是让工作站 1 处理所有小部件,同时让工作站 2 和 3 闲置,然后将整个小部件容器传递到工作站 2 开始工作,而工作站 1 和 3 闲置,依此类推。相反,站点 1 需要立即将完成的小部件(一次 1 个或一次 10 个左右)发送到站点 2,以便它们可以尽快开始处理。目标是让所有站点始终保持尽可能繁忙。

在您的示例中,站点 1 是 mysql 检索记录,站点 2 是转发(并处理?)记录的应用程序,站点 3 是 supercsv。因此,只需确保 supercsv 能够尽快开始工作,而不必等待 mysql 完成整个请求。

如果你这样做正确,你应该能够像mysql向你扔记录一样快地生成csv文件*,然后,如果它仍然太慢,你需要重新考虑你的数据库后端。

*我还没有使用过 supercsv,所以我不知道它的性能如何,但考虑到它的工作是多么琐碎以及它是多么受欢迎,我会找到它很难相信它最终会在这项任务中表现不如 mysql(以一条记录所需的处理时间来衡量)。但这可能是值得验证的事情......

关于Java-将大量数据写入csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23311802/

相关文章:

java - 使用 json 从 php 传递数据时如何为自定义 ListView 创建 OnItemClickListener

c# - 使用泛型的 C# 方法多态性的性能

c# - 优化从 System.Diagnostics.EventLog 读取的 LINQ

java - 如何读取 Java 中包含多行单元格的 .csv 文件?

javascript - d3.js 中从 CSV 到 JSON 的转换

.net - GridView : Export to csv issue

java - 可以使用其中包含双引号的 Groovy MarkupBuilder 生成 XML 吗?

java - 从IPCAM播放音频流的极端延迟

java - Java Web应用程序框架

mysql - 最少按不同分组 - SQL