【发布时间】:2014-04-26 13:47:50
【问题描述】:
我只是想通过使用 supercsv 编写从 mysql db 获取到 CSV 的大量数据。我可以多么简单地管理性能问题。超级 csv 写有一些限制吗?
【问题讨论】:
-
您遇到什么性能问题?内存不足?处理速度慢?数据库连接的等待时间长吗?
标签: java performance csv supercsv
我只是想通过使用 supercsv 编写从 mysql db 获取到 CSV 的大量数据。我可以多么简单地管理性能问题。超级 csv 写有一些限制吗?
【问题讨论】:
标签: java performance csv supercsv
由于您在问题中几乎没有详细说明您是如何解决问题的,因此很难提出具体建议。所以,这是一个通用的:
除非您将文件写入非常慢的介质(一些旧的 USB 记忆棒或其他东西),否则您的过程中最慢的一步应该是从数据库中读取数据。
构建程序的一般方法有两种:
这个想法是建立一些通常被称为“管道”的东西。可以把它想象成工厂中的传送带结构:在组装某些小部件的过程中有多个步骤。你不想做的是让站 1 处理所有小部件,同时让站 2 和站 3 处于空闲状态,然后将整个小部件容器传递给站 2 开始工作,而站 1 和站 3 处于空闲状态,依此类推.相反,站 1 需要立即将完成的小批量(一次 1 个或一次 10 个左右)小部件发送到站 2,以便他们可以尽快开始处理它。我们的目标是让所有站点在任何时候都尽可能忙碌。
在您的示例中,站 1 是 mysql 检索记录,站 2 是转发(和处理?)它们的应用程序,站 3 是 supercsv。因此,只需确保 supercsv 可以尽快开始工作,而不必等待 mysql 完成整个请求。
如果你做对了,你应该能够像 mysql 向你抛出记录一样快地生成 csv 文件*,然后,如果它仍然太慢,你需要重新考虑你的数据库后端。
*我还没用过supercsv,所以我不知道它的性能如何,但考虑到它的工作多么琐碎,它有多受欢迎,我会找到它很难相信在这个任务中它最终会表现得不如 mysql 好(以一条记录所需的处理时间来衡量)。但这可能是值得验证的事情......
【讨论】: