【发布时间】:2018-12-04 01:25:06
【问题描述】:
CSV 文件将上传到 Amazon S3 存储桶中。
当前实施:
- 使用返回 List 的 OpenCSV 实用程序的 readAll 读取 CSV 文件
- 将每个列值映射到一个实体对象
- 创建一个列表对象(当前大小 :: 15000)
- 调用 Spring Data CRUD Repository saveAll(List objects)
- 在 780k 条记录中,只有 570k 条记录保留在数据库中。
- 在插入这么多记录后,我们没有看到任何异常/错误。
完全不知道之后发生了什么
谷歌搜索后发现 PostgreSQL 中的copy 命令是读取/写入 PostgreSQL 数据库的最快方法。
Java、C、Python 等多种语言也支持此功能。
尝试使用 PostgreSQL 的 CopyManager API,该 API 具有重载版本的 copyIn 方法。
copyIn(String sql, InputStream is) - 我们不能使用它,因为我们的 csv 在第一行包含标题列并且我们想跳过第一行。
copyIn(String sql, Reader rd) - 这不接受 CSVReader 对象,因为它不是 java.io.Reader 类型
技术
- Java 8
- Spring-Boot 2.0
- Spring -Data 2.x
- Spring-JPA 2.x
- PostgreSQL - 9.6
【问题讨论】:
标签: java spring-boot java-8 spring-data-jpa postgresql-9.6