Spring 数据 REST - 对数据库的前 10 次调用非常慢
Spring Data REST - First 10 calls to DB are very slow
问题描述
启动我的 Spring 引导应用程序后,通过 JPA/Hibernate 连接到 Postgres 数据库并使用 Spring Data REST,前 10 个调用是通过 REST API 到应用程序非常非常慢(从 5-10 秒不等)。
项目设置和配置
我有一个父“模板”项目,通过它可以为子项目提供一个通用域模型。然后这些在每个子项目中可用,包括父项目中的所有其他 bean。
设置如下所示:
对于父项目:
我自己的通用父 POM(使用 spring-boot-starter-parent 以及其他依赖项)
| ...是
的父 POM
父项目(Spring Boot/Spring 数据 REST,提供通用 beans)
对于子项目:
我自己的通用父POM(同上)
| ...是
的父 POM
子项目 -> 有父项目作为依赖项
预期和实际结果
我尝试在两个项目中创建(通过 HTTP POST,使用 REST API)同一实体的多个实例。使用 父项目 ,实体的创建时间约为 0.1 秒,始终如一。但是在 Subproject 中,前 10 个 - 并且始终恰好是 10 个 - HTTP 调用(POST 和 GET)非常慢,每个请求最多 10 秒,完全相同实体。预期行为是看到与第一次调用相同的速度。
在这前 10 个请求之后,性能与父项目相似。
我不知道为什么会出现这种行为。如果有人有建议,将不胜感激!
我通过查看 Hibernate 正在执行的 SQL 查询解决了这个问题。我正在使用 InheritanceType.TABLE_PER_CLASS。正因为如此——正如许多在线文档也提到的那样——在处理大量实体类型时,性能可能会严重下降,在我扩展基础项目的情况下就是这种情况。必须执行太多 UNION 和 JOIN 查询。通过切换到 InheritanceType.SINGLE_TABLE,它再次以极快的速度运行!
问题描述
启动我的 Spring 引导应用程序后,通过 JPA/Hibernate 连接到 Postgres 数据库并使用 Spring Data REST,前 10 个调用是通过 REST API 到应用程序非常非常慢(从 5-10 秒不等)。
项目设置和配置
我有一个父“模板”项目,通过它可以为子项目提供一个通用域模型。然后这些在每个子项目中可用,包括父项目中的所有其他 bean。
设置如下所示:
对于父项目:
我自己的通用父 POM(使用 spring-boot-starter-parent 以及其他依赖项)
| ...是
的父 POM父项目(Spring Boot/Spring 数据 REST,提供通用 beans)
对于子项目:
我自己的通用父POM(同上)
| ...是
的父 POM子项目 -> 有父项目作为依赖项
预期和实际结果
我尝试在两个项目中创建(通过 HTTP POST,使用 REST API)同一实体的多个实例。使用 父项目 ,实体的创建时间约为 0.1 秒,始终如一。但是在 Subproject 中,前 10 个 - 并且始终恰好是 10 个 - HTTP 调用(POST 和 GET)非常慢,每个请求最多 10 秒,完全相同实体。预期行为是看到与第一次调用相同的速度。
在这前 10 个请求之后,性能与父项目相似。
我不知道为什么会出现这种行为。如果有人有建议,将不胜感激!
我通过查看 Hibernate 正在执行的 SQL 查询解决了这个问题。我正在使用 InheritanceType.TABLE_PER_CLASS。正因为如此——正如许多在线文档也提到的那样——在处理大量实体类型时,性能可能会严重下降,在我扩展基础项目的情况下就是这种情况。必须执行太多 UNION 和 JOIN 查询。通过切换到 InheritanceType.SINGLE_TABLE,它再次以极快的速度运行!