什么是使用Java从另一台postgres服务器中插入一百万行到postgresql服务器中的有效方法?

w

我有两个postgresql服务器,我需要从第一种服务器格式复制表行,然后转换为另一种服务器格式(不同的列名)。

我将Java应用程序与spring boot和jpa仓库一起使用,该仓库实现了方法findAll,流读取大小为1000。

    @Query("select c from ExternalFormatEntity c")
    @QueryHints(@javax.persistence.QueryHint(name = "org.hibernate.fetchSize",
            value = Constants.DEFAULT_FETCH_SIZE))
    Stream<ExternalFormatEntity> findAllEntities();

阅读后,我将转换并批量插入1000行。

try (Stream<ExternalFormatEntity> allExtEntitiesStream = extFormatService.getAllEntities()) {
    LinkedList<CanonicalFormatEntity> canonicalEntityList = new LinkedList<>();
        allExtEntitiesStream.forEach(extEntity -> {
            if (Objects.nonNull(extEntity)) {
                canonicalEntityList.add(SomeConverter.convert(extEntity));
            }
            if (canonicalEntityList.size() >= DEFAULT_BATCH_SIZE) {
                List<CanonicalFormatEntity> copyList = new LinkedList<>(canonicalEntityList);
                canonicalEntityList.clear();
                Thread thread = new Thread(() -> {
                    canonicalEntityRepository.saveAll(copyList);
                    canonicalEntityRepository.flush();
                    copyList.clear();
                });
                thread.start();
            }
        });
}

我认为,对于100万条记录,此操作的当前速度可以快于1小时。我可以加快此操作的速度吗,如果可以,该怎么办?

首先,我试图将表记录从第一个数据库转换为CSV文件,将其保存在另一台服务器上,并使用Postgres Copy Api进行下载,但是由于硬盘的额外操作,汇总时间仍然不可接受。

也许postgres拥有流写作或其他功能?我在官方的PostgreSQL文档中找不到答案。

w

对于我来说,下一个解决方案有所帮助

  1. 使用zip压缩将外部表导出到csv文件(示例来自StackOverflow答案:https ://stackoverflow.com/a/3981807/3744622

  2. 将小型zip文件复制到/ tmp文件夹中的postgres服务器 scp root@ext_server:/path/to/file root@target_server:/tmp/

  3. 从csv压缩文件导入表(来自StackOverflow答案的示例:https ://stackoverflow.com/a/46228247/3744622

我完成了大约10分钟的摘要时间。

谢谢大家,这是一个很棒的地方)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用私有密钥scp将目录复制到另一台服务器

如何使用JSch SSH到另一台SSH服务器后面的服务器?

将Postgres数据库从一台服务器复制到另一台服务器

从一台EMX服务器到另一台EMX服务器的队列迁移

在bash中从另一台服务器运行postgres查询

从服务器发送文件到另一台服务器使用rest框架

使用Paramiko将命令从远程服务器执行到另一台远程服务器

在vertx中,有没有一种方法可以更改标头并重定向到另一台服务器

从一台远程服务器到另一台远程服务器的scp

从一台外部服务器到另一台外部服务器的SCP

从一台sql服务器选择到另一台?

SFTP从一台服务器到另一台服务器在PHP应用程序中吐出错误

htaccess规则在一个服务器上有效,但在另一台服务器上无效

什么时候将网站删除到另一台服务器?

SCP从远程服务器到另一台远程服务器

到另一台服务器中的远程DB2 db的连接字符串

dd从一台服务器到另一台服务器的postgres备份失败

如何通过第二台服务器的密钥使用另一台服务器SSH到服务器?

将一台服务器复制到另一台服务器

如何使用post方法重定向到mvc中的另一台服务器?

如何通过传入的http呼叫传递到dart中的另一台服务器?

从一台sql服务器到另一台sql服务器的数据插入

将文件或文件夹从一台Linux服务器复制到另一台Linux服务器的方法

SSIS-将结果集从存储的proc插入另一台DB服务器上的表中

在Heroku中,我如何从另一台服务器连接PostgreSQL?

Java proxyservlet 将数据发布到另一台服务器

java中调用在另一台服务器上运行的C函数的最佳方法是什么?

为什么我的 glassfish 服务器重定向到另一台服务器?

使用ansible同步将目录从一台服务器复制到另一台服务器到不同的路径