当前位置: 首页 > 知识库问答 >
问题:

从Java向Postgresql加载数据的速度非常慢

索嘉石
2023-03-14

我有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(); 
}

有人对我能做些什么来让事情更快有什么建议吗?

共有2个答案

徐子石
2023-03-14

尝试以下方法:

PGConnection con = (PGConnection) DriverManager.getConnection(...);

CopyManager copyManager = con.getCopyAPI();

copyManager.copyIn("copy mytable from stdin with (format csv)", grabberReader);

如果mytable被严重索引,则删除索引,加载并重新创建索引。

翟源
2023-03-14

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

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

 类似资料:
  • 我正在使用Protege5.2.0版本,并尝试从http://purl.org/ontology/mo/添加音乐本体。我已经在我的电脑上下载了rdfs,当我尝试导入我的本体上的文件时,加载需要花费很长时间。 特别是,加载“http://purl.org/ontology/similarity/”时,它会冻结:现在它已经在那里大约10分钟了,每次我都必须粗暴地关闭程序,否则它不会停止加载。 有没有办

  • 问题所在 问题很怪异,出乎意料。上传/下载工作完美,但非常慢。 我在一个良好的互联网连接1MBps,但这些文件从来没有以这种速度传输。它大约是100-150KBps,这几乎是我的网络可用速度的15%。 请注意,我没有更改上载和下载的超时设置。他们违约了。

  • 我正在使用IMU(3轴加速度计、3轴陀螺仪、3轴磁力计),我想从加速度计数据中获取线性加速度。我知道传感器融合和使用陀螺仪数据(并获取方向)获取重力矢量的能力,从而消除其对相应轴的影响。 我走在正确的道路上吗?如果可以的话,你能帮忙吗?

  • 问题内容: 我正在使用Chrome的本机消息传递API将页面的DOM传递给主机。当我尝试将一个小字符串从扩展名传递到主机时,一切正常,但是当我尝试传递整个DOM(不是那么大…仅260KB左右)时,一切运行都慢得多,最终我得到了阻止主机响应。 我的主要问题:为什么将250KB-350KB的消息从扩展名传递到主机需要这么长时间? 根据开发者的网站: Chrome会在一个单独的进程中启动每个本机消息传递

  • 首先让我先说明一下,我刚刚开始了解如何使用Beam的Python SDK和GCP Dataflow! 问题:我的管道对于几乎所有的用例都非常有效。没有我可以抱怨的错误。我只是对一些可能的瓶颈或我可以做的优化有一些问题。我注意到,当处理大小为50MB的gzipped文件时,我的管道执行时间几乎超过3个小时。不完全确定是否有任何方法来加快这一部分。下面是在作业最终成功完成之前我看到的一堆日志警告的截图

  • 问题内容: 我正在查询有关的信息。 我正在迭代一个数组,并查询列表中的每个值。 不幸的是 ,在调试器下, 单个查询大约需要3-4秒,而 在禁用调试器的情况下, 查询时间要 短一些。 任何想法为什么这么慢?我使用进行测试。 这是我的代码: 更新资料 当我离开时,评估很快就完成了,但是我没有得到。它返回一个空字符串… 问题答案: 感谢@nvrmnd我尝试了一下,发现了一种更好的解析器: VTD-XML