我有一个SpringBoot项目,它将从一个数据库中提取大量数据,对其进行某种转换,然后将其插入PostgreSQL数据库中的表中。这一过程将持续数十亿次,因此性能是关键。
我一直在研究如何找到最好的方法,例如使用ORM或jdbc模板。对于PostgreSQL的批量插入,我经常看到的一件事是COPY命令。https://www.postgresql.org/docs/current/populate.html
我很困惑,因为使用COPY需要将数据写入一个文件,虽然我见过有人说要使用它,但我还没有遇到有人提到如何将数据放入文件的情况。写文件不是很慢吗?如果对一个文件的写入速度很慢,那么拷贝所带来的性能提升是否会让它看起来根本没有提升?

最佳答案

这种数据迁移和转换最好在存储过程中处理。假设源数据已经加载到postgres(如果不使用postgres db实用程序将原始数据加载到某个平面表)。然后编写一系列存储过程来转换数据并插入到目标表中。
我做了一些复杂的数据迁移,我使用了这种方法。如果需要进行很多复杂的数据转换,可以编写一些python脚本(通常比spring boot/data setup要快),插入部分转换后的数据,然后执行一些存储过程来完成最终的转换。
最好将转换/按摩数据的业务逻辑保持在靠近数据源(存储过程中)的位置,而不是将数据拉到app server并重新插入它们。
希望有帮助。

10-07 13:07
查看更多