Verbesserung
Wichtig
Detail
Fehlerbehebung
Wichtig
Detail
Wichtig
#27189
Performance: Viele Anfragen an FLEX_DATA beim Löschen großer Mengen von Fachobjekten
Beim Löschen eines Fachobjekts müssen auch die entsprechenden Einträge aus der FLEX_DATA Tabelle gelöscht werden. Müssen in einer Transaktion viele Datenobjekte gelöscht werden (z.B. komplette Strukturen mit vielen Elementen), so führt das zu einer Menge SQL-Updates gegen die Datenbank, was die Ausführungszeit (je nach Datenbankanbindung) stark verzögert.
Es gibt zwar eine Bulk-API deleteAll(List<DBKnowledgeItem) im FlexDataManager Interface, die Implementierung in der AbstractFlexDataManager allerdings iteriert durch die Menge der zu löschenden Objekte und löst für jeden Eintrag ein SQL-Statement aus.
Ein ähnliches Problem besteht beim Update oder der Anlage vieler Objekte.
Verbesserung
Um das Löschen zu beschleunigen und die Menge an auszuführenden SQL-Statements zu reduzieren, könnten die Objekte geeignet (z.B. nach Branch und Typ) partitioniert werden und durch ein WHERE IN (mittels Chunking) zusammengefasst werden.
Bei der Erstellung bzw. dem Update von vielen Objekten könnte ein SQL-Batch erzeugt werden, in welchem nicht nur die Attribute eines Objektes sondern die Attribute meherere Objekte gespeichert werden können.
Test
test.com.top_logic.knowledge.service.db2.FlexManagerPerformanceTest