急切加载与延迟加载:大型 Web 应用程序的最佳数据获取策略?

问题描述 投票:0回答:1

我正在 Python 中使用 Django 构建一个大型 Web 应用程序(我可能会切换到 Flask),并且我正在尝试优化获取数据的方式。具体来说,我正在争论对于具有复杂关系(例如嵌套数据、外键)的大型数据集的急切加载(预先获取所有数据)和延迟加载(按需获取数据)。

我的主要挑战是过度获取(预先检索太多数据)、N+1 查询问题(多个不必要的查询)、用户感知的延迟(加载数据的延迟)。这些方法之间的权衡是什么?我如何决定何时使用其中一种方法?在处理大量数据和实时更新的同时优化数据获取性能有什么建议吗?

TL;DR:对于具有复杂数据和实时更新的大型应用程序,您如何决定何时使用急切加载和延迟加载?

python django web-applications
1个回答
0
投票

QuerySet
是惰性,这对于提高性能很有用,但可能更有用,因为您可以进一步过滤
QuerySet
,对其进行分页等。

N+1查询问题

您可以使用

.prefetch_related(…)
 [Django-doc] 来修复此问题,如果您评估
QuerySet
,它还会在一个额外查询中获取相关数据。如果关系更复杂,您甚至可以使用
Prefetch
对象[Django-doc]

很多工具也没有充分利用

QuerySet
。例如,可以使用
.only(…)
 [Django-doc]
仅检索某些列,从而最大限度地减少数据库和应用程序之间的带宽。

© www.soinside.com 2019 - 2024. All rights reserved.