java csv文件上传_Java中级程序员:使用CSV和JDBC高效上传数据

数据从一个系统到另一个系统的批量传输是许多企业应用程序中的常见功能。但是,它们通常效率低下。首先,源系统运行批处理作业,生成(通常较大的)更新文件。一段时间后,另一个作业查找此文件并将其上传到目标系统,通常是通过FTP或类似的东西。最后,远程系统上的第三个作业查找上载的文件并导入它(假设它可用)。

086a85a9a7eea21c780ea9fcf0f1522c.png

这种过程很慢且容易出错。目标系统必须等到前两个进程(生成导出文件和上传)完成后才能启动。由于第二步和第三步是时间相关的,如果意外情况导致任何先前任务延迟运行,就会导致失败。

更好的选择是并行执行这些操作。通过流式传输源系统生成的输出,目标系统可以在生成时使用它,从而消除了冗余且耗时的复制步骤。

85f1ed0eb9eb96100d96342ac3528762.png

导出示例

例如,以下代码模拟导出CSV文档的批处理。它使用开源HTTP-RPC框架中的 WebServiceProxy 和CSVEncoder 类将模拟数据上载到RESTful Web服务。传递给编码器构造函数的字符串值表示输出文件中的列:

1ec0da9cef015fa259b4766eedec99e4.png

数据由以下类提供,该类只生成任意数量的重复行。在实际应用程序中,数据很可能来自关系数据库或类似的东西:

0a5f92529fb7c1eb9a140c5ce9a84d46.png

生成的文档看起来像这样:

f4e0c7bd6877215849aac188ef574bfb.png

导入服务

用于处理已导出的数据的Web服务可能如下所示。该方法不是将整个有效负载预先读入内存,而是使用HTTP-RPC的 CSVDecoder 类来获取CSV文档中的行。在读取每条记录时,它将被插入到数据库中:

0414843becb3c13d4415a6c971ef5a4f.png

批量更新

即使该服务有效地处理了客户端提供的数据,它也非常慢。仅导入500条记录需要将近30秒!解决方案是批量插入记录,如下所示:

5b97d77068cbea6b48a160731067d00e.png

此方法与前一版本几乎相同。但是,不是为每一行执行数据库更新,而是每25,000行对更新进行批处理并执行一次。该服务现在可以在大约30秒内处理500,000行 - 比之前的版本快1000倍!

总结

数据传送是许多企业系统中的常见元素,并且通常比较低效。但是,通过流式导入和使用批量更新,可以显着提高性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值