从大数据库更新小记录的最佳方法是什么?
What is the best method to update small records from a big database?
我有一个数据库,其中包含我从植物学网站下载的 CSV 的所有数据,我希望它始终根据此 CSV 的版本进行更新。我的问题是 CSV 非常大,它包含至少 100 万条记录,平均需要一整小时才能保存所有内容。关于如何在不需要重写整个内容的情况下执行此更新的任何想法?泰斯姆!
一些额外信息:
- 这是一个 nodeJs 项目,我正在使用 Prisma 作为 ORM
- 它实际上是一个 txt 文件,我将其解析为 CSV,因为所有数据都由制表符分隔
- 我正在使用 posgresql
- 目前我正在放弃 table 并从头开始保存所有内容
您没有提到如何将数据加载到 postgres 中,但是您可以使用 COPY 命令,如下所示:
从“/tmp/myfile.csv”复制 mytable(格式为 csv,header 真);
应该比使用 ORM 更快
https://www.postgresql.org/docs/current/sql-copy.html
其他选项是使用file_fdw,如果你只需要查询数据,不需要更新
您基本上需要找到两个 csv 版本之间的差异并找到已更改的记录并更新这些记录。
您可以使用任何 text/csv 比较器 npm 库来找出差异,一旦您获得有更新的记录,您就可以为它们启动更新查询。
我有一个数据库,其中包含我从植物学网站下载的 CSV 的所有数据,我希望它始终根据此 CSV 的版本进行更新。我的问题是 CSV 非常大,它包含至少 100 万条记录,平均需要一整小时才能保存所有内容。关于如何在不需要重写整个内容的情况下执行此更新的任何想法?泰斯姆!
一些额外信息:
- 这是一个 nodeJs 项目,我正在使用 Prisma 作为 ORM
- 它实际上是一个 txt 文件,我将其解析为 CSV,因为所有数据都由制表符分隔
- 我正在使用 posgresql
- 目前我正在放弃 table 并从头开始保存所有内容
您没有提到如何将数据加载到 postgres 中,但是您可以使用 COPY 命令,如下所示:
从“/tmp/myfile.csv”复制 mytable(格式为 csv,header 真);
应该比使用 ORM 更快
https://www.postgresql.org/docs/current/sql-copy.html
其他选项是使用file_fdw,如果你只需要查询数据,不需要更新
您基本上需要找到两个 csv 版本之间的差异并找到已更改的记录并更新这些记录。
您可以使用任何 text/csv 比较器 npm 库来找出差异,一旦您获得有更新的记录,您就可以为它们启动更新查询。