psycopg2在设置PostgreSQL的情况下将大量数据写入AWS的RDS实例的速度有多快?

时间:2015-10-11 05:38:46

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

我正在尝试使用PostgreSQL数据库向RDS实例写入15 Mb的数据,但是我发现这非常慢......将所有数据完全写入实例需要大约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()

1 个答案:

答案 0 :(得分:0)

问题

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

怎么做?

将所有数据量拆分为块,并为每个事务插入多个数据实例。您可以使用1000行开始实验,也可以根据数据大小创建限制,例如:计算从csv文件导出到postgres db的每行的行大小。

摘要

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

使用pandas

你也可以使用pandas做同样的事情,这对于管理时间序列数据非常有用,但你可以按照这个asnwer importing-a-csv-file-into-a-sqlite3-database-table-using-python中描述的方式使用它pandas.read_csv和{{ 3}}