Hallo Jens,
vielleicht versuchst du einen Mittelweg. Da du die XML Dateien ja in keiner Weise in deinem Transaktionssystem verändern mußt, speichere die doch einfach ganz normal als BLOB oder TEXT in der releationalen Datenbank. Die XML DB ist doch erst dann wirklich interessant, wenn ich schnell/einfach auf einzelne Bestandteile des Dokuments zugreifen will. Du hast damit sowohl die Dateioperationen weg als auch die Konsistenz zwischen Transaktions-Daten und vorhandenen XML-Dokumenten gesichert.
Frank
Jens Puruckherr wrote:
Hallo,
ich habe hier eine Frage zur Softwarearchitektur, die am Rande mit Linux/Perl zu tun hat. Aber weil ihr hier alle so schön interdisziplinär zusammensitzt, kann doch was draus werden ;-) Also:
Eine vorhandene, in Perl implementierte Middleware verarbeitet XML-Dateien. Diese werden umgeformt, geteilt und letztenendes an ein anderes System weitergereicht. Das kennen wir ja schon, ich habe euch deswegen schon gelöchert. Nun kommt es gelegentlich zu Laufzeitproblemen derart, das die Information in einem XML sich auf das Vorhandensein der Info in einem anderem XML verlässt. Also A hat eine Ergänzung zu B. Es wird vorrausgesetzt, dass B irgendwann schonmal durch die Middleware gegangen ist und somit im Zielsystem vorhanden ist. Möglicherweise steckt jetzt aber B in einem XML, was in einer halben Stunde vorbeikommt. Die Information A wird somit vom Zielsystem verworfen.
Meine Idee ist jetzt, in irgendeiner Art ein Logbuch zu führen, welches z.B: die Antworten vom Zielsystem auswertet ("B noch nicht vorhanden") und somit die Zustellung von A später wiederholt. Dazu habe ich zwei technische Realisierungen im Auge, kann mich aber für keine entscheiden:
- Es werden nur die Transactionsinfos in einer Datenbank
vorgehalten. Die eigentlichen XMLs stehen bis zur vollendeten Übertragung im Dateisystem. 2. Ich setze eine XML-DB ein (Berkeley DB XML), packe das ganze XML dortrein und ergänze es jeweils um die Transactionsinfos. Wenn die Übertragung perfekt ist, fliegt es wieder raus.
Die zweite Variante scheint mir technisch sauberer und interessanter zu sein. Allerdings scheint diese nach einigen Tests nicht die performanteste zu sein. Die erste Variante ist wohl die klassische Variante und schneller, ich befürchte aber, das es u.U. zu Inkonsitenzen zwischen LOG-Db und wirklich vorhandenen Dateinen kommen kann. Ausserdem muss ich neben den DB-Queries noch eine Reihe von Filesystemoperationen durchführen. Es gibt also mehrere Fehlerquellen.
Kann mir jemand helfen, mir Variante 1 oder 2 ein- oder auszureden ??
Danke.
Mit freundlichen Grüßen
Jens Puruckherr
Lug-dd maillist - Lug-dd@schlittermann.de http://mailman.schlittermann.de/mailman/listinfo/lug-dd