/ / Java - Spring - Hibernate extrai 1000 objetos do banco de dados leva muito tempo - java, banco de dados, spring, desempenho, hibernação

Java - Spring - Hibernate extrai 1000 objetos do banco de dados leva muito tempo - java, banco de dados, spring, desempenho, hibernação

eu tenho um Banco de dados Postgres com 17 tabelas criadas pelo Hibernate com o @Entidade anotação e iam correndo CrudRepository com o encontrar tudo método para extrair objetos do banco de dados

Tudo funciona bem até eu tentar recuperar mais de 1000 objetos do banco de dados, o que leva 27 segundos. A recuperação de 600 objetos leva cerca de 10 segundos.

O tempo está aumentando exponencialmente e eu estouimaginando se existe uma solução para isso, sei que se eu tentar ingressar em tabelas, isso aceleraria o processo, mas ingressar em 17 tabelas é muito trabalhoso. Existem outros métodos de extração mais rápidos na recuperação de objetos além do que estou usando?

É assim que eu recupero objetos:

public List<Document> getAllDatabaseDocuments() {
List<Document> listOfDocs = new ArrayList<>();
listOfDocs.addAll((List<Document>) sdr.findAll());
return listOfDocs;
}

Respostas:

0 para resposta № 1

Todos os provedores de JPA têm QueryHints para fazer certa otimização de consulta. Ele fornece a capacidade de buscar todas as associações em uma única consulta ou usando junções. Por exemplo, no EclipseLink, você pode usar QueryHints.BATCH buscar tudo one to many ou many to many associações em uma única consulta.

Ao invés de usar findAll(), crie sua própria consulta em sua entidade e forneça a dica de consulta apropriada específica para hibernar. join-fetch no seu caso, levará muito tempo porque você possui muitas entidades relacionadas. Tente usar batch-fetch pois reduzirá o número de consultas e acelera efetivamente a busca.

Você pode aprender mais sobre estratégias de busca específicas da hibernação Aqui