Home. 
.

transparent

transparent

transparent

Verwendung von Altova Tools für die Arbeit mit XML-Daten in der Amazon RDS Cloud

(Dieser technische Tipp wurden anhand eines Posts im Altova Blog adaptiert. Im Altova Blog finden Sie die neuesten Nachrichten von Altova, lesen über neue Produktfunktionen, technische Tipps und Branchenneuigkeiten. Die Quellen für die unten dargestellten SQL-Skripts finden Sie am Ende der Seite, von wo Sie sie in Ihre Dokumente kopieren können.)

Immer mehr Unternehmen entdecken die Vorteile der Implementierung von Datenbankapplikationen in der Cloud:

  • Hohe Verfügbarkeit und Zuverlässigkeit
  • Automatische Skalierung
  • Keine Hardware-Kosten und Wartung

In diesem technischen Tipp wird gezeigt, wie Sie eine Verbindung zum Amazon Relational Database Service (Amazon RDS) herstellen und mit Hilfe von Altova DatabaseSpy eine kleine Datenbank erstellen können. Da alle Produkte des Altova MissionKit einen einheitlichen Datenbankverbindungsassistenten aufweisen, erfolgt die Herstellung in XMLSpy, MapForce oder StyleVision auf die gleiche Weise.

Wenn Sie die unten beschriebenen Schritte selbst nachvollziehen möchten, müssen Sie sich unter http://aws.amazon.com/rds/ für einen Amazon Web Services (AWS) Account anmelden.

Eine Testversion des Altova MissionKit mit dem vollen Funktionsumfang oder jede beliebigen Einzelapplikation von Altova steht unter http://www.altova.com/de/download-trial/ zur Verfügung.

Erstellen eines lokalen Prototyps

Der Amazon RDS basiert auf MySQL, daher werden wir eine kleine lokale Datenbank in der MySQL Community Edition erstellen, diese dann nach Amazon RDS migrieren und die Datenbank in der Cloud testen. Zwar unterstützt MySQL XML nicht als Datentyp für Datenbankspalten, doch unterstützen MySQL 5.1 und 6.0 einige Operationen für als Text gespeicherte XML-Daten. Wir werden für diese Übung einige der MySQL XML-Beispiele in den hier aufgelisteten MySQL-Referenzressourcen adaptieren und erweitern:

http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html

http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html

http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html

Wir haben zuerst DatabaseSpy gestartet und eine Verbindung zu unserer lokalen MySQL Community Edition hergestellt. Wir haben eine neue Datenquelle namens Local Prototype und ein neues Datenbankschema namens XMLtest erstellt. Hier sehen Sie den DatabaseSpy Online Browser und das Fenster "Eigenschaften":

DatabaseSpy Online Browser and Properties helper windows

Als nächstes haben wir zwei Tabellen namens "books" und "cities" erstellt und gemäß den Beispielen in der MySQL-Dokumentation Daten eingefügt. Hier sehen Sie die Tabellen in der DatabaseSpy Design-Ansicht:

DatabaseSpy Design view of two tables

Wir können Select-Abfragen ausführen und den Inhalt unserer Tabellen in übereinandergestapelten Ergebnisfenstern anzeigen:

DatabaseSpy Query and Results windows

Beachten Sie, dass die doc-Spalte der Tabelle "books" XML-Daten enthält, obwohl sie als varchar(150) definiert wurde.

MySQL unterstützt zwei Funktionen beim Arbeiten mit XML in Textfeldern, ExtractValue( ) and UpdateXML( , die über XPath-Ausdrücke an einzelnen Elementen ausgeführt werden können. Unten sehen Sie eine einfache ExtractValue( ) Abfrage, mit der nur die Initialen der Autoren aus den einzelnen Zeilen der Tabelle "books" zurückgegeben werden:

DatabaseSpy ExtractValue( ) query and result

Mit Hilfe der UpdateXML( ) Funktion kann der Inhalt einzelner XML-Elemente mit Hilfe eines SQL-Ausdrucks geändert werden. In der Abbildung unten aktualisiert die Abfrage in Zeile 1 alle Zeilen der Tabelle "books", während die Abfrage in Zeile 2 die neuen Werte zurückgibt:

DatabaseSpy UpdateXML( ) query

Außerdem können wir mit Hilfe der Concat( ) Funktion wie unten gezeigt XML-Elemente zu Nicht-XML-Daten wie der Tabelle "cities" hinzufügen:

DatabaseSpy Concat( ) function example

Bisher wurden alle unsere XML-Abfragen an allen Zeilen jeder einzelnen Tabelle ausgeführt. Um Abfragen an einer einzigen Zeile zu vereinfachen, fügen Sie am besten eine Spalte für einen eindeutigen Zeilenindex zur Tabelle hinzu. Wir können eine Kopie unserer Tabelle "books" machen und eine Spalten namens "id" für den Zeilenindex hinzufügen.

Die Spalte "id" bietet außerdem einen praktischen Sekundärschlüssel, mit dem ein einzelnes XML-Dokuments in unserer Tabelle aus einer andern Tabelle referenziert werden kann. So könnten Sie z.B. eine Tabelle mit Namen von Stellenbewerbern definieren, die einen Sekundärschlüssel enthält, der die in XML formatierten und in einer separaten Tabelle gespeicherten Lebensläufe der einzelnen Kandidaten referenziert.

Mit Hilfe des SQL-Editors in DatabaseSpy können Sie eine CREATE-Anweisung für die bestehende Tabelle "books" erstellen und diese direkt editieren oder Sie können die Tabelle grafisch mit dem DatabaseSpy Design Editor erstellen.

Da wir dieselben Abfragen später in Amazon RDS ausführen möchten, haben wir für die Tabelle "books2" eine SQL CREATE-Anweisung und SQL INSERT-Anweisungen in einem Skript miteinander kombiniert.

In der Abbildung unten sehen Sie einen Teil des Skripts für books2:

SQL script to create a database table in DatabaseSpy

Wir können an der Tabelle "books2" eine Abfrage durchführen, um die eindeutige id-Spalte für jede Zeile anzuzeigen:

SQL query and result in DatabaseSpy

Nun können wir unsere UpdateXML( ) und ExtractValue( ) Abfragen verfeinern, damit sie an einer einzelnen Zeile ausgeführt werden:

UpdateXML( ) example in DatabaseSpy

ExtractValue( ) example in DatabaseSpy

Auf diese Art haben wir eine gute Beispielbasis, die wir in die Cloud migrieren und in einem Amazon RDS testen können.

Verbinden von DatabaseSpy mit der Amazon RDS Cloud

Nachdem Sie gemäß der Anleitung der AWS Management Console eine Datenbankinstanz auf Amazon RDS erstellt haben, können Sie mit Hilfe des Verbindungsassistenten von DatabaseSpy ganz einfach eine Verbindung herstellen. Wählen Sie einfach wie hier gezeigt die Option MySQL aus:

DatabaseSpy Conenction Wizard

Wenn die Verbindung zum ersten Mal hergestellt wird, müssen Sie einen neuen DSN erstellen. Anschließend kann der DSN mit der Option "Vorhandenen Data Source Name verwenden" aus einer Liste ausgewählt werden. Auch von XMLSpy, MapForce oder StyleVision aus können Sie den ursprünglich erstellten DSN verwenden.

DatabaseSpy MySQL Connection Wizard

Füllen Sie im Verbindungsdialogfeld die folgenden Informationen aus:

  • Datenquellenname: Dies ist der Name, der beim erneuten Herstellen einer Verbindung im DatabaseSpy-Projektfenster und in der Liste der vorhandenen Datenquellen aufgelistet wird.
  • Beschreibung: Informationen zu Referenzzwecken.
  • Server: Dies ist der Endpunktname, der in Ihrem Amazon RDS Account Dashboard aufgelistet wird.
  • Port: 3306 – stellen Sie sicher, dass Ihre IT-Abteilung diesen Port nicht mit einer Firewall gesperrt hat!
  • Benutzer / Passwort: Dies ist ein Benutzername, den Sie in Amazon RDS eingerichtet haben.
  • Datenbank: Der Standard-Datenbankname, den Sie beim Start der RDS-Instanz konfiguriert haben.

MySQL ODBC Connector

Wir haben die Verbindung zur Amazon RDS Cloud-Datenbank im selben DatabaseSpy-Projekt hergestellt, das wir auch für den lokalen Prototypen verwendet haben. In der Abbildung unten sehen Sie das Projektfenster mit den Datenquellennamen und den zum Projekt hinzugefügten SQL-Arbeitsdateien:

Local Prototype and Cloud database in DatabaseSpy

Bevor wir unsere Tabellen erstellen und die Abfragen ausführen, sollten wir die Versionen der einzelnen Systeme überprüfen. In den Abbildungen unten sehen Sie eine Abfrage der Versionsinformationen für die einzelnen Systeme. Beachten Sie, dass in der grauen Leiste direkt oberhalb der Abfrage angezeigt wird, welcher Datenverbindung die SQKL-Anweisung zugewiesen wurde.

Version Check query and result for local database

Version Check query and result for Amazon RDS database

Das Ergebnis der Abfrage ist, dass auf Amazon RDS Version 5.1 des MySQL Community Servers läuft, also dieselbe Version wie auf unserem lokalen Prototyp - ein vielversprechender Beginn!

Migrieren des lokalen Projekts in die Cloud

Wir können die einzelnen ursprünglichen Skripts zur Erstellung der Tabelle öffnen und sie durch Neuzuweisung des Ausführungsziels im Fenster "Eigenschaften" in der Cloud-Datenbank ausführen.

DatabaseSpy Properties window for a SQL query

Die graue Ausführungszielleiste im oberen Bereich des SQL Editor-Fensters gibt die Amazon RDS Cloud-Datenbank als Datenbankziel an:

Create table script in DatabaseSpy

Nachdem wir die Tabellen "books" und "books2" auf ähnliche Weise erstellt haben, können wir die einzelnen SQL-Abfragen an der Cloud-Datenbank ausführen.

Beispiel ExtractValue( ) Funktion für alle Zeilen:

ExtractValue( ) script and result in Amazon RDS

Concat( ) Abfrage zur Erstellung einer XML-Ausgabe anhand von Nicht-XML-Daten in einer Tabelle:

Concat( ) script and result in Amazon RDS

UpdateXML( ) Beispiel für eine einzige Zeile in einer Tabelle.

Update script and result in Amazon RDS

ExtractValue( ) für eine einzige Zeile:

ExtractValue( ) script and result in Amazon RDS

Fazit

In jedem von uns durchgeführten Test verhielt sich Amazon RDS genau wie die lokale MySQL Community Edition. Dadurch lassen sich neue Cloud Datenbankapplikationen oder Verbesserungen an bestehenden Applikationen viel effizienter erstellen und testen, ohne dass die Cloud-Ressourcen in den Entwicklungsphasen Kosten verursachen.

Wir haben auch die MySQL XML-Funktionen für XML-Daten, die in Textspalten in Cloud-Datenbanken gespeichert sind, überprüft. Zwar waren unsere XML-Daten in der Größe sehr beschränkt - die Textspalte in unserer Tabelle "books" war auf 150 Zeichen beschränkt - doch gestattet MySQL die Speicherung viel größerer XML-Dokumente in einer einzigen Spalte. Jede Tabelle hat eine maximale Zeilengröße von 65.535 Bytes. Selbst, wenn in Ihrer Tabelle eine Indexspalte verwendet wird, bedeutet das, dass eine varchar-Spalte für einen XML-Eintrag über 65.000 Bytes enthalten darf.

Wenn Sie noch größere XML-Dokumente speichern müssen, bietet MySQL ähnlich BLOBs MediumText und LongText-Datentypen. MediumText bietet Platz für über 16 Millionen Single-Byte Zeichen und LongText für mehr als 4 GB. Zwar gibt es keine Abbildung davon in diesem Blog Post, doch haben wir die Funktionen ExtractValue( ) and UpdateXML( ) mit den Datentypen MediumText und LongText erfolgreich getestet.

Wenn Sie so große XML-Datendateien speichern müssen, kann die Erstellung von XPath-Ausdrücken zur Auflösung einzelner Elemente sich ziemlich schwierig gestalten. Der in XMLSpy enthaltene XPath Analyzer ist ein wertvolles Tool zum Testen und Debuggen von XPath 1.0 und 2.0-Ausdrücken. Während Sie einen XPath-Ausdruck in den Analyzer eingeben, überprüft XMLSpy ihn und gibt das resultierende Node Set in Echtzeit zurück. Dies kann viele Stunden Zeit beim Debuggen, Analysieren und Auffinden von XPath-Fehlern sparen.

Quellen für die SQL-Skripts

Hier finden Sie die oben besprochenen SQL-Skripts zum Kopieren und Einfügen in Ihre Dateien:

Das CREATE-Skript für die Tabelle "cities" und die Varianten des CONCAT( ) Beispiels stammen aus http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html

Hier finden Sie die oben dargestellte CONCAT( )-Anweisung:

SELECT CONCAT('<city>', '<name>', name, '</name>', '<country>', country, '</country>', '<population>', population, '</population>', '</city>\n' ) AS xmldoc FROM cities;

Die "books"-Tabellenbeispiele basieren auf http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html

Hier finden Sie ein CREATE-Skript für die Tabelle "books":

CREATE TABLE books (doc VARCHAR(150));

INSERT INTO books VALUES (' <book> <title>A guide to the SQL standard</title> <author> <initial>CJ</initial> <surname>Date</surname> </author> </book> ');

INSERT INTO books VALUES (' <book> <title>SQL:1999</title> <author> <initial>J</initial> <surname>Melton</surname> </author> </book> ');



Und das Skript für books2:

CREATE TABLE `books2` ( `id` int NOT NULL, PRIMARY KEY (`id`), `doc` varchar (150) ) ;

INSERT INTO books2 VALUES (1, ' <book> <title>A guide to the SQL standard</title> <author> <initial>CJ</initial> <surname>Date</surname> </author> </book> ');

INSERT INTO books2 VALUES (2, ' <book> <title>SQL:1999</title> <author> <initial>J</initial> <surname>Melton</surname> </author> </book> ');



Hier finden Sie das UpdateXML( ) Beispiel für books2:

UPDATE books2 SET doc = UpdateXML(doc,'/book/author/initial','<initial>ZZ</initial>') WHERE id = 2;

SELECT id, doc from books2;



und das ExtractValue( ) Beispiel:

SELECT EXTRACTVALUE(doc,'/book/author/initial') FROM books2 WHERE id=1;

Wenn Sie selbst testen möchten, wie gut sich Altova-Tools für die Arbeit mit Amazon RDS eignen, laden Sie eine kostenkose Testversion des Altova MissionKit herunter.

Download MissionKit Downloaden Sie jetzt eine kostenlose Testversion des Altova MissionKit mit dem vollen Funktionsumfang.



transparent
Print
Mail
Like It
2010 SD Times100
.

SDTimes100

.

Altova wurde 2010 zum zweiten Mal in Folge in die SD Times 100 in der Kategorie “Tools & Frameworks” aufgenommen.

.
.

Jolt Product Excellence Award 2009

.

Altova MissionKit erhält Jolt Award für “Beste Entwicklungsumgebung”

.
.

Lesen Sie den Altova Blog
Read the Altova Blog!

.

Im Altova Blog lesen Sie über die neuesten Altova-Produktankündigungen, neue Produktfunktionen, technische Tipps und Informationen über die Branche. Registrieren Sie sich jetzt!

.
.

transparent

transparent