python - psycopg2 可以多快将大量数据写入 AWS 的 RDS 实例,并设置了 PostgreSQL?

标签 python postgresql amazon-web-services rds large-data

我正在尝试将 15 Mb 的数据写入带有 PostgreSQL 数据库的 RDS 实例,但我发现这真的很慢......将所有数据完全写入实例大约需要 15 分钟以上。任何人都经历过将大量数据逐行写入 RDS 实例?谢谢!

# Assuming the table is already created
def handler(file_with_many_many_rows, con):
    cur = con.cursor()
    reader = csv.reader(f)

    for i, line in enumerate(reader):
        vals = ("val1", "val2", "val3")
        insert_query = "INSERT INTO table_test VALUES (%s, %s, %s);"
        cur.execute(insert_query, vals)

    con.commit()

最佳答案

问题

我几乎可以肯定您尝试执行的查询数量存在问题。通过分析您的方法的复杂性,我可以假设它是 O(n),因为您有 15 * 10^6 行,执行时间约为 15 分钟。

怎么办?

将所有数据量分成 block ,并为每个事务插入多个数据实例。您可以从 1000 行开始实验或根据数据大小创建限制,例如计算从 csv 文件导出到 postgres 数据库的每一行的行大小。

总结

如果您直接使用 psycopg2,请尝试 executemany游标一次插入多行的方法。这是 example of how to use executemany without spliting在要插入的 block 上。

使用 Pandas

您也可以使用 pandas 做同样的事情,这对于管理时间序列数据非常有用,但您可以按照此 asnwer importing-a-csv-file-into-a-sqlite3-database-table-using-python 中描述的方式将其用于您的目的。使用 pandas.read_csvpandas.DataFrame.to_sql .

关于python - psycopg2 可以多快将大量数据写入 AWS 的 RDS 实例,并设置了 PostgreSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061915/

相关文章:

python - 求 N 皇后拼图递归算法的唯一解

python - 如何将 python 程序插入 bash 脚本?

node.js - 用于 NodeJS 单元测试的模拟 AWS 服务

amazon-web-services - 通过自定义资源Cloud Formation Template创建DynamoDB

python - Selenium 即使提供了很高的隐式等待时间也无法找到元素

python - visual studio 代码 Unresolved 导入?

postgresql - pg_dump 忽略表序列?

regex - 使用列数据作为正则表达式匹配的模式

sql - order by in view是否保证select的顺序?

node.js - 获取错误 AWS Lambda : EROFS: read-only file system, 打开 '/var/task/assets/docs.zip'