2

我对此有点陌生,所以如果有人可以帮助我,那就太棒了。

所以我在 SQLAlchemy 中为我正在开发的 Flask 应用程序设置了一些模型。在构建应用程序时,我用一些假数据填充了数据库(当前是 SQLite),我有点惊讶我的一个调用有多慢。

我在数据库中有一个名为 Menu 的表。菜单有一个孩子,sections,它有一个孩子,items。像这样:

  • 菜单
    • 部分
      • 项目

我要查询的对象是 1 个菜单,它有 4 个部分,每个部分有 10 个项目。

在我的 Flask 路由中,我使用 Menu.query.get(id) 查询数据库并使用棉花糖将其序列化为 JSON。

整个过程需要 250 毫秒的时间才能在我的本地机器上返回。

所以我的问题是:我担心 250 毫秒是愚蠢的吗?缓慢的罪魁祸首是什么?- 糟糕的架构设计?- SQLite / 使用 SQL 数据库?- 别的?

任何帮助将不胜感激。

此外。我最初还有 2 个更深的级别(项目有选项可以选择),但它需要大约一秒钟才能完成,所以当用户请求特定项目时,我将它们移动到单独的端点。

4

1 回答 1

5

鉴于一切都是本地的,我同意 250 毫秒是过多的。我预计缓慢的原因是正在执行多个 SQL 查询以构建 JSON。

SQLAlchemy 配置上的设置SQLALCHEMY_ECHO = True将显示正在生成的 SQL 查询并确认这一点。

您尚未提供数据库模型,但您可能会发现您的关系正在被延迟加载,因此正在为树中的每个对象创建一个新的 SQL 查询。您可以在 SQLAlchemy 文档的关系加载技术部分找到更多信息。

设置lazy='joined'子关系(即 Menu -> Section 和 Section -> Items)将导致子关系使用 JOIN 而不是默认的 SELECT 急切加载。

于 2016-07-14T13:44:20.903 回答