1

我在我们的 Intranet 上的 VM 上托管了一个 PostgreSQL 服务器。网络中的其他地方(这些机器无法访问相同的文件系统)我有大约 850 个 R 脚本正在运行(同时),每个脚本生成 500k 到 300 万行数据,我想推送到一个(当前为空)数据库中的表。我正在尝试确定这样做的最佳方法是什么。到目前为止,我想出了这些解决方案:

  1. 使用 R odbc 和 DBI::dbWriteTable 包/函数将数据推送到远程服务器。作为测试,我尝试同时采用这条路线进行 3 批(约 850 批),这需要约 25 分钟。

  2. 将数据导出为文本文件,使用 SSH 将文本文件复制到托管数据库的服务器,并用于COPY导入数据

有没有更好的方法来做到这一点?做这个的最好方式是什么?

我试图推送到的表已编入索引并具有外键以及唯一约束。我在某处读过,在添加数据之前删除这些,然后再将它们添加回来可以显着加快速度。这会产生重大影响吗?

4

1 回答 1

3

根据我对大型 PG 数据库的经验,没有什么比 PG 主机本身的 COPY 语句更快的了。如果您在转储文件上放置一些快速的 gzip 或类似的东西,您也会以显着的方式加快向该主机的传输速度。最重要的是,您应该禁用所有索引,并在数据库表填满后启用它们。所以是的,你的 (2) 是我最喜欢的,在导入时结合了禁用的索引

于 2018-10-30T21:45:58.453 回答