Spring Data REST - первые 10 обращений к БД очень медленные - PullRequest
0 голосов
/ 17 апреля 2020

Описание проблемы

После запуска моего приложения Spring Boot, подключенного к базе данных Postgres через JPA / Hibernate и использования Spring Data REST, первые 10 вызовов, выполненных через REST API для приложения, следующие: очень, очень медленно (в диапазоне от 5 до 10 секунд).

Настройка и настройка проекта

У меня есть родительский "шаблонный" проект, с помощью которого предоставляется общая модель домена c. детские проекты. Затем они становятся доступными в каждом подпроекте, включая все другие bean-компоненты в родительском проекте.

Настройка выглядит следующим образом:

Для родительского проекта:

  1. Мой родной POM c parent (используя spring-boot-starter-parent вместе с дополнительными зависимостями)

    | ... является родительским POM

  2. Родительский проект (Spring REST / Spring Data REST с предоставлением обобщенных c компонентов)

Для подпроекта:

  1. Мой собственный универсальный c родительский POM (такой же, как указано выше)

    | ... является родительским POM

  2. Подпроект -> имеет Родительский проект в качестве зависимости

Ожидаемые и фактические результаты

Я пытался создать (через HTTP POST, используя REST API) несколько экземпляров одного и того же объекта в обоих проектах. Используя Родительский проект , сущности создаются примерно за 0,1 секунды. Но в подпроекте первые 10 - и последовательно ровно 10 - HTTP-вызовов (как POST, так и GET) действительно медленны - до 10 секунд на запрос для одной и той же сущности. Ожидаемое поведение - видеть те же скорости с первого звонка.

После этих первых 10 запросов производительность аналогична родительскому проекту.

Я понятия не имею, почему происходит такое поведение. Если у кого-нибудь есть предложение, оно будет оценено!

1 Ответ

0 голосов
/ 02 мая 2020

Я решил проблему, посмотрев на SQL запросы, которые выполнял Hibernate. Я работал с InheritanceType.TABLE_PER_CLASS. Из-за этого - и, как также упоминается во многих онлайн-документах, - может иметь место серьезное снижение производительности при работе со многими типами сущностей, что имеет место в моей ситуации путем расширения базового проекта. Слишком много запросов UNION и JOIN пришлось выполнить. Переключившись на InheritanceType.SINGLE_TABLE, он снова работает молниеносно!

...