![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: egal
Firebird Trigger asynchron ausführen
Hi,
gibt es in Firebird eigentlich eine Möglichkeit, einen Trigger, bzw. eine Procedure asynchron auszuführen? Ich habe mir eine Volltextsuche mit diversen Procedures und Triggern programmiert. Beim Insert oder Update wird die Volltextsuche für einen bestimmten Datensatz erneuert, beim Delete wird die Volltextsuche für den bestimmten Datensatz gelöscht. Funktioniert soweit super. Jetzt ist es aber so, dass die Indizierung erst fertiggestellt werden muss, bevor ein Insert / Update / Delete fertig ausgeführt ist. Die Zugriffskomponenten warten da natürlich drauf und verlangsamen so das Programm. Im Normalfall dauert die Indizierung zwar nur so kurz, dass ich den Performanceverlust nicht spüre, aber bei Batchimports oder ähnliches, merkt man es dann schon. Toll wäre also eine Möglichkeit, um dem Trigger (der die Procedure aufruft) oder der Procedure selbst zu sagen, dass die Indizierung ruhig in einen 2. Thread ausgelagert werden kann, und die Indizierung nicht in "Echtzeit" ausgeführt werden muss... Gibt es so etwas? Auch würde mich interessieren, ob es sonst Datenbanken gibt, die so etwas können... |
AW: Firebird Trigger asynchron ausführen
Das geht nicht. Was du machen könntest ist den kompletten Trigger Body in ein IF zu packen und dort z.B. auf den CURRENT_USER abfragen. Ein Batch-Import könnte sich dann mit einem Benutzer verbinden, wo er dann in den IF Zweig nicht reinkommt und im Zuge des Batch-Import am Ende einmal die SP aufgerufen wird.
|
AW: Firebird Trigger asynchron ausführen
Aktuelle VT-Techniken aktualisieren die VT-Indexe im Hintergrund und periodisch. Nach meinem bescheidenen Kenntnisstand gibt es keine real-time VT-engines, eben genau wegen dem beschriebenen Problem.
Was Du machen könntest, ist in Triggern die Änderungen zu protokollieren und dann periodisch einen VT-Update mit den protokollierten Änderungen durchzuführen. |
AW: Firebird Trigger asynchron ausführen
Vielleicht würde es auch reichen, die Trigger für den Batchvorgang zu deaktivieren.
|
AW: Firebird Trigger asynchron ausführen
Danke erst mal für eure Antworten
Also die Trigger zu deaktivieren / zu umgehen macht für mich wenig Sinn, da die Indizierungsdauer dann einfach nur nach hinten verschoben wird. Macht unterm Strich also keinen Unterschied... Dann werde ich wohl mit der Performancenachteil leben müssen... Hat dann auch den Vorteil, dass ich wirklich immer eine aktuellen Volltextindex habe. :-) |
AW: Firebird Trigger asynchron ausführen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz