我有 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/