Java-将大量数据写入csv

时间:2014-04-26 13:47:51

标签: java performance csv supercsv

我只是想通过使用supercsv来编写从mysql db获取到CSV的大量数据。我是如何简单地管理性能问题的。超级csv是否有一些限制?

1 个答案:

答案 0 :(得分:1)

由于您在问题中几乎没有详细说明如何处理问题,因此很难提出具体建议。所以,这是一般的:

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

您可以通过以下两种方式构建程序:

  1. 错误方式:首先将数据库中的所有数据读入应用程序的内存,然后在第二步中将所有数据一次性写入csv文件。< / LI>
  2. 正确方式:&#34; Stream&#34;从db到csv文件的数据,即将数据写入csv文件,因为它进入你的应用程序(按记录或逐批记录)。
  3. 这个想法是建立一个通常被称为&#34;管道&#34;的东西。可以把它想象成工厂中的传送带结构:在组装某个小部件的过程中有多个步骤。你不想做的是让第1站处理所有小部件并让第2和第3站同时闲置,然后将整个小部件容器传递到第2站开始工作,而第1和第3站闲置并且等等。相反,站1需要立即发送小批量(一次1个或大约10个)小组,这些小组立即对站2进行,以便他们可以尽快开始对其进行操作。目标是始终保持所有电台尽可能繁忙。

    在你的例子中,站1是mysql检索记录,站2是你的应用程序转发(和处理?)它们,站3是supercsv。因此,只需确保supercsv可以尽快开始工作,而不必等待mysql完成整个请求。

    如果你这样做,你应该能够尽快生成csv文件,因为mysql可以向你抛出记录 * ,然后,如果它仍然太慢,你需要重新考虑你的数据库后端。

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