Portierung XML Strukturen in relationale Strukturen Ein Erfahrungsbericht über die Durchführung der Verarbeitung einer hohen Anzahl XML Files 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 1 Wer sind wir? • • 22.09.2009 Matthias Lange - über 12 Jahre Erfahrung mit Oracle - als Berater,und DBA u.a. bei EDS und Pfizer - [email protected] Thomas Tretter - über 18 Jahre Erfahrung mit Oracle - als Berater und DBA u.a. bei Bosch, Arcor, Lufthansa Systems und T-Online/Telekom - DOAG Vorstand und Regioleiter Rhein/Main - [email protected] M. Lange / T.Tretter: Portierung XML Strukturen 2 Agenda • Kurze Beschreibung der Ausgangssituation • Rahmenbedingungen • mögliche Alternativen • gewählte Alternative • Durchführung des Dokumenten Imports • Erfahrungen 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 3 Ausgangssituation • Produktivbetrieb einer XML Datenbank Apache Xindice • Die Dokumente der Apache Xindice Datenbank werden in einzelnen XML Files zur Verfügung gestellt • XML Files 68 Tag 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 4 Projektziele • Archivierung der Dokumente mittels IBM Optim • Auswahl des geeigneten Verfahrens (XMLSpy, XMLSpy API, XMLMapForce, Eigenentwicklung) • Die Dokumente müssen nach der Archivierung, mittel IBM Optim Browser, recherchierbar sein • Aufbewahrung nach gesetzlichen Richtlinien • 68 Tabellen 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 5 Rahmenbedingungen • • • • • Ein XML File enthält maximal 60 Masteraufträge Filename: exportyyyymmdd_ARCHIV000616.xml Anzahl XML Files > 250.000 Die Daten müssen in Oracle strukturiert vorliegen Den Inhalt vom Datentyp CLOB kann der Optim Browser nicht auflösen 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 6 XML -> ER Modell <apdb:Masterauftrag masterauftragId=""> <Auftragsnummer/> <KwpNummer/> <AuftragsbestMail/> <Vertriebskennzeichen/> <Personalnr/> <ElogKundennr/> <Einlesedatum/> <Vorwahl/> <Rufnr/> <apdb:Quelle ID="quelleId"> <Kurztext/> <Langtext/> </apdb:Quelle> <apdb:Status ID="statusId"> <Langtext/> </apdb:Status> <apdb:Filiale ID="filialeId"> <Kurztext/> <Langtext/> <apdb:Ecvp ID="ecvpId"> <EcvpNr/> <Name/> </apdb:Ecvp> <apdb:VisMasterfiliale ID="visMasterfilialeId"> <Langtext/> </apdb:VisMasterfiliale> </apdb:Filiale> 22.09.2009 CREATE TABLE APDB.MASTERAUFTRAG ( "Primärschlüssel" VARCHAR2(255 BYTE), "Auftragsnummer" VARCHAR2(255 BYTE), "KwpNummer" VARCHAR2(255 BYTE), "AuftragsbestMail" VARCHAR2(255 BYTE), "Vertriebskennzeichen" VARCHAR2(255 BYTE), "Personalnr" VARCHAR2(255 BYTE), "ElogKundennr" VARCHAR2(255 BYTE), "Einlesedatum" VARCHAR2(255 BYTE), "Vorwahl" VARCHAR2(255 BYTE), "Rufnr" VARCHAR2(255 BYTE), "Sekundärschlüssel" VARCHAR2(255 BYTE) ) CREATE TABLE APDB.QUELLE ( "Primärschlüssel" VARCHAR2(255 BYTE), "Sekundärschlüssel" VARCHAR2(255 BYTE), "Kurztext" VARCHAR2(255 BYTE), "Langtext" VARCHAR2(255 BYTE) ) M. Lange / T.Tretter: Portierung XML Strukturen 7 mögliche Alternativen • XMLSpy GUI – Export in Datenbank • XMLSpy API – Export in Datenbank • DaisyImport - Eigenentwicklung • welche ist die beste Alternative? 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 8 Alternative 1 XMLSpy GUI: • Manuell, immer nur ein XML File • Primärschlüssel wiederholt sich • Filegröße: > 200MB Memoryfehler 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 9 Alternative 1: XMLSpy GUI initial: relationale Struktur erzeugen Quelldatenbank XML ODBC Verbindung Export Zieldatenbank Oracle relational ODBC Verbindung XML Dateien liest Datei XML Spy GUI pro Datei: Inhalte in Oracle importieren Schlüssel werden aut. erzeugt schreibt XML Spy Logdatei 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 10 1 0 XMLSpy GUI 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 11 Alternative 2 XMLSpy API: • Automatisiert, kann mehr Files verarbeiten • Zeitdauer des Verfahrens nicht unerheblich • Primärschlüssel wiederholt sich • Keine Angabe eines Logfiles (siehe XMLSpy GUI) • Keine Einstellung zur Nutzung von vorhandenen Tabellen!!! 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 12 Alternative 2: XMLSpy API initial: relationale Struktur erzeugen Quelldatenbank XML ODBC Verbindung Export Zieldatenbank Oracle relational ODBC Verbindung XML Dateien liest Datei XML Spy API pro Datei: Inhalte in Oracle importieren Schlüssel werden aut. erzeugt liest Werte l i l l i i e e s M. Lange / T.Tretter: Portierung XML Strukturen s t XML Spy Parameter Datei 22.09.2009 13 1 3 Gewählte Alternative 3 DaisyImport: • Dateiverarbeitungsdauer < 10s • Primärschlüssel kann eindeutig definiert werden (Millisekunden) • Parallelverarbeitung • Java Programm 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 14 Alternative 3: SAX Loader (in Java) Voraussetzung: relationale Struktur existiert Quelldatenbank XML liest Datenstruktur JDBC Verbindung Export JDBC Verbindung XML Dateien liest Datei SAX Loader (Java) SAX Loader Parameterdatei 22.09.2009 Zieldatenbank Oracle relational pro Datei: Inhalte in Oracle einfügen (insert) Schlüssel werden aut. erzeugt SAX Loader Logdatei M. Lange / T.Tretter: Portierung XML Strukturen 15 1 5 Parameter Datei für SAX Loader # # Konfiguration für Daisy XML Import # # # Verzeichnis-Pfade entweder mit / oder \\ trennen! # # XML-Quellverzeichnis dir.input=Z:/y2009 # XML-Ziel für erfolgreiche Verarbeitung dir.output=Z:/output/y2009/m06 # XML-Ziel für fehlerhafte Verarbeitung dir.error=z:/error # # Datenbank-Konfiguration # jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@10.223.6.81:1521/o10ar1.world jdbc.login=APDB jdbc.password=APDB # # Anzahl DB-Verbindungen/Import-Threads # import.threads=16 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 16 Sax Loader • gute Darstellung der Architektur und es Ablaufs: http://de.wikipedia.org/wiki/Simple_API_for_XML <?xml version="1.0" encoding="ISO-8859-1"?> <APDBExport xmlns:apdb="apdb.dm."> <apdb:Masterauftrag masterauftragId=""> <Auftragsnummer>080612-61880307</Auftragsnummer> <AuftragsbestMail>n</AuftragsbestMail> <Vertriebskennzeichen>0180501</Vertriebskennzeichen> <Einlesedatum>2008-06-12 15:22:52.0</Einlesedatum> <Vorwahl>0761</Vorwahl> <Rufnr>45367450</Rufnr> <apdb:Quelle ID="quelleId"> <Kurztext>EKI-CSS</Kurztext> <Langtext>T-Com Schnittstelle Online Auftrag</Langtext> </apdb:Quelle>’ … • erzeugte Ereignisse startDocument() startElement("apdb:Masterauftrag",[masterauftragId=""]) startElement("Auftragsnummer",[]) character("080612-61880307") endElement("Auftragsnummer") startElement("AuftragsbestMail",[]) character(“n") endElement("AuftragsbestMail") startElement("Vertriebskennzeichen",[]) character("0180501") endElement("Vertriebskennzeichen") … endElement("apdb:Masterauftrag") 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 17 1 7 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 18 Anzeige der Daten im Optim Browser (I) 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 19 Anzeige der Daten im Optim Browser (II) 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 20 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 21 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 22 Vorteile der Beteiligten • für uns (die Referenten) • für die Telekom (die Auftraggeber) • für Sie (die Zuhörer) 22.09.2009 M. Lange / T.Tretter: Portierung XML Strukturen 23 2 3