首页 文章

SQLAlchemy-Marshmallow查询和序列化为JSON的速度很慢

提问于
浏览
1

我对此有些新意,所以如果有人可以帮助我,那就太棒了 .

所以我在SQLAlchemy中为我正在研究的Flask应用程序设置了一些模型 . 在我构建应用程序的时候,我填充了db(当前是SQLite)的一些假数据,我很惊讶我的一个调用速度有多慢 .

我在DB中有一个名为Menu的表 . 菜单上有一个孩子,各个部分,里面有一个孩子,物品 . 像这样:

  • 菜单

  • 章节

  • 项目

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

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

整件事需要花费250毫秒才能在我的本地机器上返回 .

所以我的问题是:我在担心250毫秒时我是傻瓜吗?缓慢的罪魁祸首是什么? - 糟糕的架构设计? - SQLite /使用SQL Db? - 还有别的吗?

任何帮助将不胜感激 .

另外 . 我最初还有2个更深层次(项目有选项可供选择),但它需要大约一整秒才能完成,所以当用户请求特定项目时,我将它们移动到一个单独的 endpoints .

1 回答

  • 2

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

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

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

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

相关问题