我需要从一个PostgreSQL数据库中读取并连接大量的行(约500k),并将它们写入到一个MySQL数据库中。
我的天真的方法看起来像这样:
entrys = Entry.query.yield_per(500)
for entry in entrys:
for location in entry.locations:
mysql_location = MySQLLocation(entry.url)
mysql_location.id = location.id
mysql_location.entry_id = entry.id
[...]
mysql_location.city = location.city.name
mysql_location.county = location.county.name
mysql_location.state = location.state.name
mysql_location.country = location.country.name
db.session.add(mysql_location)
db.session.commit()
每个“Entry”大约有1到100个“Locations”。
由于所有内容都保留在内存中,直到会话提交,因此此脚本现在运行了约20小时,并且已经消耗了> 4GB的内存。
尝试提前提交时,我遇到了像this这样的问题。
如何提高查询性能?它需要变得更快,因为行数将在未来几个月内增长到约2500k。
pg_dump dbname | mysql dbname
- Jochen Ritzelpg_dump
如何帮助。 - dbanck