Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何优化Postgres COPY的性能?_Java_Database_Multithreading_Postgresql - Fatal编程技术网

Java 如何优化Postgres COPY的性能?

Java 如何优化Postgres COPY的性能?,java,database,multithreading,postgresql,Java,Database,Multithreading,Postgresql,复制本身大约需要30秒。你会考虑这个合理的表现吗?我能做些什么来优化性能 原因:我必须一天几次批量插入数亿行。因此,当导入大约5亿行时,这将持续4小时 我怎样才能提高速度?切换到其他数据库?创建多线程并行导入?为什么不将循环中的行直接输入copyIn方法?在内存中构建一切似乎相当复杂。或者将100万行放入一个文件中,然后直接从该文件将行馈送到copyIn方法。我有一个csv文件,必须读取该文件,拆分行,取出不需要的内容,然后使用copy命令将其保存。这就是我在内存中构建它们的原因,将它们分块到例

复制本身大约需要30秒。你会考虑这个合理的表现吗?我能做些什么来优化性能

原因:我必须一天几次批量插入数亿行。因此,当导入大约5亿行时,这将持续4小时


我怎样才能提高速度?切换到其他数据库?创建多线程并行导入?

为什么不将循环中的行直接输入copyIn方法?在内存中构建一切似乎相当复杂。或者将100万行放入一个文件中,然后直接从该文件将行馈送到copyIn方法。我有一个csv文件,必须读取该文件,拆分行,取出不需要的内容,然后使用copy命令将其保存。这就是我在内存中构建它们的原因,将它们分块到例如10k,并使用copy批量发送每个行。根据从文件中删除的行数,使用copy命令将它们全部插入临时表,然后使用insert仅将需要的行移动到目标表中可能会更快。。。选择…-但我会研究某种过滤读取器,您将其传递到copyIn方法中,并在将行发送到服务器时过滤行。如果我还必须转换某些列,该怎么办?过滤+转换是我在使用StringBuilder之前构建生成的csv行的主要原因。10k行批处理足够大,因此不会从变大中获得太多好处。看起来不错。是的,平行性可能会有所帮助。真的,你需要分析为什么这是缓慢的-寻找瓶颈。Java是否使用100%的CPU,因此无法跟上PostgreSQL的写入速度?PostgreSQL是否使磁盘上的写操作饱和?PostgreSQL是否进行了大量的索引查找外键,从而减慢了速度?表上是否有不必要的索引?等
CopyManager cp;

//loop until 1 million rows have been persisted

StringBuilder sb = new StringBuilder(); //build 10k entries, comma separated
cp.copyIn("COPY tableName FROM STDIN WITH CSV", new StringReader(sb.toString()));