微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 提高查询性能

我需要从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()

每个条目有大约1到100个地点.

此脚本现在正在运行大约20个小时,已经消耗了> 4GB的内存,因为所有内容都保存在内存中,直到会话提交.

我早先尝试提交,我遇到了像this这样的问题.

如何提高查询性能?它需要更快,因为在接下来的几个月里,行数将增长到大约2500k.

解决方法:

你天真的方法是有缺陷的,因为你已经知道 – 吃内存的东西是悬挂在内存中等待刷新到MysqL的模型对象.

最简单的方法是根本不使用ORM进行转换操作.直接使用sqlAlchemy表对象,因为它们也更快.

此外,您可以做的是创建2个会话,并将2个引擎绑定到单独的会话中!然后,您可以为每个批处理提交MysqL会话.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐