Lazy Loading und Eager Loading
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
TypeORM bietet zwei Hauptmethoden zum Laden von Datenbeziehungen: Lazy Loading und Eager Loading. Jede hat unterschiedliche Auswirkungen auf die Anwendungsleistung.
Lazy Loading
Lazy Loading lädt Beziehungsdaten erst bei Bedarf, was die Datenbanklast reduziert, wenn nicht ständig alle verknüpften Daten benötigt werden.
@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { lazy: true })
posts: Promise<Post[]>
}
Wenn du auf die Daten zugreifen möchtest, rufst du einfach
const user = await userRepository.findOne(userId)
const posts = await user.posts
Vorteile:
-
Ressourceneffizienz: Lädt nur benötigte Daten bei tatsächlichem Bedarf, reduziert Abfragekosten und Speichernutzung.
-
Ideal für selektive Datennutzung: Geeignet für Szenarien, in denen nicht alle verknüpften Daten benötigt werden.
Nachteile:
-
Erhöhte Abfragekomplexität: Jeder Zugriff auf verknüpfte Daten löst zusätzliche Datenbankabfragen aus, was bei schlechter Steuerung die Latenz erhöht.
-
Schwierige Nachvollziehbarkeit: Kann bei unvorsichtiger Verwendung zum n+1-Abfrageproblem führen.
Eager Loading
Eager Loading ruft automatisch alle verknüpften Daten ab, wenn die Hauptabfrage ausgeführt wird. Dies ist praktisch, kann aber bei vielen komplexen Beziehungen zu Performance-Problemen führen.
@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { eager: true })
posts: Post[]
}
In diesem Fall werden Posts geladen, sobald Benutzerdaten abgerufen werden.
Vorteile:
-
Lädt automatisch verknüpfte Daten, was den Zugriff ohne zusätzliche Abfragen erleichtert.
-
Vermeidet das n+1-Abfrageproblem: Da alle Daten in einer Abfrage abgerufen werden, entfällt das Risiko unnötiger Mehrfachabfragen.
Nachteile:
-
Das Abrufen aller Daten auf einmal kann zu großen Abfragen führen, selbst wenn nicht alle Daten benötigt werden.
-
Ungeeignet für Szenarien mit Teilbedarf an verknüpften Daten, da es zu ineffizienter Datennutzung führen kann.
Weitere Details und Anwendungsbeispiele für Lazy- und Eager-Beziehungen findest du in der offiziellen TypeORM-Dokumentation: Eager und Lazy Relations