gpt4 book ai didi

python - 如何提高 SQLAlchemy 的性能?

转载 作者:太空狗 更新时间:2023-10-30 00:19:50 25 4
gpt4 key购买 nike

我制作了一个客户端应用程序,它使用 HTTP 通过简单的 API 与 Python 2 服务器通信。服务器广泛使用 SQLAlchemy 的 ORM 来为这些 HTTP 请求提供数据。问题是即使只有很少的事件客户端,我的 CPU 使用率也很高。该服务器应该能够同时为数百个客户端提供服务,每个客户端大约每秒 1 个请求,因此它应该仍然是可管理的(或者我希望如此)。

如何提高性能?我知道问题出在 ORM 上,因为 cProfile 非常清楚地显示了这一点。一个查询显然执行了大约 10000 条 Python 指令,这看起来很奇怪。我尝试插入不同的数据库引擎/后端并将解释器更改为 Pypy 只是为了好玩,但这显然对解决原始问题没有帮助,也没有提高性能。

我在这里做错了什么?我真的希望这是一个“好吧,呃!”问题。

我的关系应该是不同类型的吗?渴望,懒惰,动态等?现在,我没有特别指定任何内容。

非常感谢帮助。

最佳答案

这是一个非常广泛的问题,但在使用 ORM 时肯定有一些原则需要遵守。 ORM 很昂贵并且可能是资源密集型的;想一想当数据被引入模型时,在幕后发生的所有事情,以组装和维护对象关系! ORM 如何知道何时获取数据?它应该在您触摸对象的头部时急切地加载并建立所有关系,还是应该只急切地加载您在初始查询的关键紧密循环中始终需要的东西?这就是 zzzeek 的答案所在;去查看查询日志记录,看看 ORM 做了什么。然后你会说,哦,废话!,当我只需要这一件事时,为什么要这样做,你会去研究渴望与延迟加载,更新你的模型,瞧!,你会加快你的 ORM 100 倍。您也可以采用另一种方式,告诉它​​延迟加载所有内容,但是您最终可能会观察到一堆非常具体的查询,而不是单个批量查询,因此其他事情会减慢速度。一般的想法是开辟一条道路,这样您就不会在需要时获取大量数据,而是尽一切可能进行批量查询,以避免无数次单一查询。
https://dev.to/tinazhouhui/introduction-to-object-relational-mapping-the-what-why-when-and-how-of-orm-nb2

关于python - 如何提高 SQLAlchemy 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com