【发布时间】:2016-05-06 10:08:10
【问题描述】:
我有以下两个要求:
- 读取 CSV 文件并将行逐行放入数据库 (RDSMS),无需任何数据操作。
- 读取 CSV 文件并将此数据放入数据库 (RDBMS)。在这种情况下,Z 行可能依赖于 B 行。因此需要有一个暂存数据库(内存中或另一个暂存 RDBMS)
我正在分析多种方法来实现这一点:
- 使用Core java,以Producer-consumer方式读取文件。
- 使用 Apache Camel 和 BeanIO 读取 csv 文件。
- 使用 SQL 读取文件。
想知道,是否有行业定义的首选方式来执行此类任务?
我在 stackoverflow 上找到的链接很少,但我正在寻找更多选项:
- How to read a large text file line by line using Java?
- Read a huge file of numbers in Java in a memory-efficient way?
- Read large CSV in java
我正在使用 Java6 来实现。
【问题讨论】:
-
我不知道您使用的是什么数据库,但例如 MySQL 有一个名为
READ DATA INFILE的工具,它非常快,可以将大型 CSV 文件加载到表中。您能告诉我们您使用的是哪个数据库吗? -
DB2 有
LOAD命令,用于读取和加载格式良好的 csv 文件。您可以编写一个脚本来进行额外的验证等。这些实用程序的缺点是缺少事务管理等。 -
我们使用的RDBMS是MSSQL 11.0
-
另外,我们应该有逻辑在Java层还是DB层解析CSV?是否有任何行业首选的方法?
-
“行业标准”的答案是总是,这取决于。您是否正在将一个 CSV 文件加载到数据库中?每天一个 CSV 文件到数据库?每秒 100,000 个 CSV 文件到数据库?您需要提供更多详细信息,然后才能有人给您一个“行业标准”的答案。