java - 将数据从 Java 加载到 Postgresql 非常慢

标签 java sql postgresql

我有 26 个 CSV 文件,我想每晚从互联网上抓取这些文件并将它们上传到 Postgresql 表中。我使用 Java、PreparedStatement 和 Batch 进行这项工作。尽管如此,性能还是非常缓慢。要获取 6000 左右的条目并将它们放入 Postgresql,需要 30 分钟。这是我第一次做这样的事情,所以我不知道这是快还是慢的引用点。

要获取文件,我正在使用此代码。

URL grabberUrl = new URL(csvUrl);
URLConnection grabberConn = grabberUrl.openConnection();
BufferedReader grabberReader = new BufferedReader(new InputStreamReader(grabberConn.getInputStream())); 

然后我使用 PreparedStatement 从输入流中获取值并设置它们

con = DriverManager.getConnection(url, user, password);
pst = con.prepareStatement("insert into blah(name, year) values(?, ?)");
pst.setString(1, name);
pst.setString(2, year);

然后我对插入进行批处理。我尝试了从 100 到 1000 的值,但对性能没有任何有意义的改变。

pst.addBatch();

if (count == 100) { 
count = 0;
pst.executeBatch(); 
}

有没有人对我可以做些什么来加快速度有任何建议?

最佳答案

如果您可以从 PostgreSQL 服务器访问文件,请尝试使用复制语句。见链接 http://www.postgresql.org/docs/9.3/static/sql-copy.html

此外,如果您知道数据质量,您可以暂时移除任何表约束并删除任何索引。您可以在加载数据后添加约束和索引。

关于java - 将数据从 Java 加载到 Postgresql 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318539/

相关文章:

java - tryLock 方法调用是否进入 try block ?

mysql - 使用 count() 进行左外连接?

sql - 从触发器插入没有发生?

java - Android,SQL 数据库故障 1 语法错误?找不到catlog正在讨论的内容

java - Java中Image和BufferedImage的区别

java - 音频 - 在 Java 中字节到 Int 并返回

java - 两个不同 JPanel 上的 PaintComponent 坐标

sql - SQL中子字符串的使用

postgresql - 在多个后续插入中使用 INSERT ... RETURNING 的返回值

SQL(简单)逐行连接两个表