【问题标题】:Spring Data REST - First 10 calls to DB are very slowSpring Data REST - 对 DB 的前 10 次调用非常慢
【发布时间】:2020-07-31 03:33:33
【问题描述】:

问题描述

启动我的 Spring Boot 应用程序后,通过 JPA/Hibernate 连接到 Postgres 数据库并使用 Spring Data REST,通过 REST API 对应用程序进行的前 10 次调用非常非常慢(范围从 5 到 10秒)。

项目设置和配置

我有一个父“模板”项目,通过它向子项目提供通用域模型。然后这些在每个子项目中都可用,包括父项目中的所有其他 bean。

设置如下:

对于父项目:

  1. 我自己的通用父 POM(使用 spring-boot-starter-parent 以及其他依赖项)

    | ...是父 POM 的

  2. 父项目(Spring Boot/Spring Data REST,提供通用 bean)

对于子项目:

  1. 我自己的通用父 POM(同上)

    | ...是父 POM 的

  2. 子项目 -> 有 父项目 作为依赖项

预期和实际结果

我尝试在两个项目中创建(通过 HTTP POST,使用 REST API)同一实体的多个实例。使用父项目,实体在大约 0.1 秒内创建,始终如一。但是在子项目中,对于完全相同的实体,前 10 个 - 并且始终是 10 个 - HTTP 调用(POST 和 GET)非常慢,每个请求最多 10 秒。预期的行为是从第一次调用中看到相同的速度。

在前 10 个请求之后,性能与父项目相似。

我不知道为什么会发生这种行为。如果有人有建议,将不胜感激!

【问题讨论】:

    标签: java hibernate spring-boot spring-data spring-data-rest


    【解决方案1】:

    我通过查看 Hibernate 正在执行的 SQL 查询解决了这个问题。我正在使用 InheritanceType.TABLE_PER_CLASS。正因为如此——正如许多在线文档也提到的那样——在处理大量实体类型时,性能可能会严重下降,在我的情况下,通过扩展基础项目就是这种情况。必须执行太多的 UNION 和 JOIN 查询。通过切换到 InheritanceType.SINGLE_TABLE,它再次以极快的速度运行!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2014-06-09
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多