Java CSV 到 SQL 文件大小问题

标签 java sql postgresql csv filesize

我正在监控 CSV 文件,并通过以下过程导入到 Postgres:

  1. 将文件加载到 ArrayList (DATE_TIME,MEASUREMENT)
  2. 从数据库获取最新的 DATE_TIME
  3. 迭代 ArrayList
    ->如果 DATE_TIME > 最新则更新数据库
    ->如果 DATE_TIME < 最新则不关心

半小时内工作正常,但当文件开始变大时,它就难以消化。所以我想我只需要处理 CSV 文件中的每一行一次。

由于文件大小和所需UI更新的频率,将CSV批量加载到数据库也是不可能的。

有什么好方法可以跟踪我上次读取文件的位置 - 并在下次线程运行时从该点恢复读取?

最佳答案

如果您的文件很大,则不应将其加载到内存中只是为了迭代数组。您应该将程序更改为:

  1. Open the file
  2. Get the latest DATE_TIME from the database
  3. Iterate through the file getting (DATE_TIME,MEASUREMENT)
    • If DATE_TIME > latest Then update database
    • If DATE_TIME < latest Then don't care
  4. Close the file

如果您的文件非常很大,您应该考虑定期提交数据库中的更改。

现在问你的问题:能够在文件读取过程停止的地方重新启动的最简单方法是将文件的剩余部分(自上次读取以来)复制到新建临时文件,删除该文件并将临时文件重命名为原来的名称。

关于Java CSV 到 SQL 文件大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25446926/

相关文章:

java - 用log4j2将maven项目打包成jar

java - 是否可以找到特定方法内的方法调用列表?

java - Circle 不会在 JavaFX 中移动位置

mysql - 如何进行 SQL 查询以查找聚合函数的最大值,如 "count"?

javascript - 在sequelize中,如何选择与多行的不同值匹配的记录?

java - 如何使用 jOOQ 执行特定查询

postgresql - 只在内存中运行 PostgreSQL

Java 嵌套 for 循环(内部 for 循环中有 if 语句)

php - 检查 PHP mysql 查询字段中的逗号分隔值

sql - 为什么Json转入db?