/ / Java - Spring - Hibernate Das Extrahieren von 1000 Objekten aus der Datenbank dauert lange - Java, Database, Spring, Performance, Hibernate

Java - Spring - Hibernate Das Extrahieren von 1000 Objekten aus der Datenbank benötigt viel Zeit - Java, Datenbank, Spring, Leistung, Ruhezustand

Ich habe ein Postgres-Datenbank mit 17 Tabellen erstellt von Hibernate mit dem @Entität Anmerkung und ich laufe CrudRepository mit dem finde alle Methode zum Extrahieren von Objekten aus der Datenbank

Alles funktioniert einwandfrei, bis ich versuche, mehr als 1000 Objekte aus der Datenbank abzurufen, was 27 Sekunden dauert. Das Abrufen von 600 Objekten dauert ca. 10 Sekunden.

Die Zeit nimmt exponentiell zu und ich bin esWenn ich mich frage, ob es eine Lösung dafür gibt, weiß ich, dass das Verknüpfen von Tabellen den Prozess beschleunigen würde, aber das Verknüpfen von Tabellen mit 17 Tabellen ist eine Menge Arbeit. Gibt es andere Extraktionsmethoden, die schneller zum Abrufen von Objekten sind als die, die ich verwende?

So rufe ich Objekte ab:

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

Antworten:

0 für die Antwort № 1

Alle JPA-Anbieter haben QueryHints um bestimmte Abfragen zu optimieren. Sie haben die Möglichkeit, alle Verknüpfungen in einer einzelnen Abfrage oder über Joins abzurufen. In EclipseLink können Sie beispielsweise verwenden QueryHints.BATCH alles holen one to many oder many to many Assoziationen in einer einzigen Abfrage.

Anstatt zu verwenden findAll()Erstellen Sie in Ihrer Entität eine eigene Abfrage, und geben Sie den entsprechenden Hinweis für den Ruhezustand an. join-fetch In Ihrem Fall wird es viel Zeit in Anspruch nehmen, da Sie viele verwandte Entitäten haben. Versuchen zu benutzen batch-fetch Dies reduziert die Anzahl der Abfragen und beschleunigt das Abrufen.

In diesem Abschnitt erfahren Sie mehr über bestimmte Abrufstrategien für den Ruhezustand Hier