Hallo zusammen.
Ich nutze Hibernate/Spring und eine MySQL Datenbank zur Datenhaltung.
Aktuell stelle ich in einer JTable eine Baumstruktur dar. Ein Baum kann mehrere Äste haben, welche wiederum mehrere Äste (bis zu 9 Ebenen), oder auf unterster Ebene Blätter haben können. Dies hat bisher auch super geklappt, nur leider stoße ich mittlerweile bei tiefen Ebenen auf Performanceprobleme.
Derzeit hab ich es so realisiert, dass ein Ast einen Foreign Key auf seinen Parent besitzt. Im Domainobject ist dieser dann als Ast-Objekt via getParent() verfügbar. Möchte ich nun auf tieferen Ebenen an einen vorhandenen Ast einen weiteren Ast anhängen, so dauert dies je tiefer die Ebene länger.
Grobe Werte aus einem Microbenchmark (Anlegedauer eines Astes):
Ebene1 : 32ms.
Ebene3 : 80ms.
...
Ebene9 : 232ms.
Da die Ebenen (somit die Anzahl der Parents) ganz offensichtlich eine Rolle spielen, wollte ich Fragen, ob es Ansätze gibt, die sich in der Praxis bewährt haben, um dieses Problem zu umschiffen. Mir ist nicht ganz klar, warum Hibernate beim Anlegen eines Datensatzes den gesamten Objektbaum bis zum Root auflösen muss. Dies kann aber die einzige Ursache sein, da ein Ast sonst keinerlei Relationen auf andere Objekte besitzt, oder liege ich da ganz falsch?
Für Tipps oder Anregungen wäre ich dankbar.
Grüße,
jambusa
Ich nutze Hibernate/Spring und eine MySQL Datenbank zur Datenhaltung.
Aktuell stelle ich in einer JTable eine Baumstruktur dar. Ein Baum kann mehrere Äste haben, welche wiederum mehrere Äste (bis zu 9 Ebenen), oder auf unterster Ebene Blätter haben können. Dies hat bisher auch super geklappt, nur leider stoße ich mittlerweile bei tiefen Ebenen auf Performanceprobleme.
Derzeit hab ich es so realisiert, dass ein Ast einen Foreign Key auf seinen Parent besitzt. Im Domainobject ist dieser dann als Ast-Objekt via getParent() verfügbar. Möchte ich nun auf tieferen Ebenen an einen vorhandenen Ast einen weiteren Ast anhängen, so dauert dies je tiefer die Ebene länger.
Grobe Werte aus einem Microbenchmark (Anlegedauer eines Astes):
Ebene1 : 32ms.
Ebene3 : 80ms.
...
Ebene9 : 232ms.
Da die Ebenen (somit die Anzahl der Parents) ganz offensichtlich eine Rolle spielen, wollte ich Fragen, ob es Ansätze gibt, die sich in der Praxis bewährt haben, um dieses Problem zu umschiffen. Mir ist nicht ganz klar, warum Hibernate beim Anlegen eines Datensatzes den gesamten Objektbaum bis zum Root auflösen muss. Dies kann aber die einzige Ursache sein, da ein Ast sonst keinerlei Relationen auf andere Objekte besitzt, oder liege ich da ganz falsch?
Für Tipps oder Anregungen wäre ich dankbar.
Grüße,
jambusa