我正在尝试将 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_csv
和 pandas.DataFrame.to_sql
.
关于python - psycopg2 可以多快将大量数据写入 AWS 的 RDS 实例,并设置了 PostgreSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061915/