XML in der Cloud
Die Verwendung von Altova-Tools in Verbindung mit dem Amazon Relational Database Service (Amazon RDS)
Immer mehr Unternehmen erkennen die Vorteile, die sich aus der Implementierung von Datenbankanwendungen in der Cloud ergeben:
- Hohe Verfügbarkeit und Zuverlässigkeit
- Automatische Skalierung
- Freiheit von Hardwarekosten und Wartungsaufwand
In diesem Blogbeitrag zeigen wir, wie man sich mit dem Amazon Relational Database Service (Amazon RDS) verbindet und eine kleine Datenbank mit Altova DatabaseSpy erstellt. Da der Datenbankverbindungsassistent in allen Altova MissionKit-Produkten gleich ist, können Sie sich auf die gleiche Weise mit XMLSpy, MapForce oder StyleVision verbinden.
Wenn Sie die unten beschriebenen Schritte selbst ausprobieren möchten, benötigen Sie ein Konto bei Amazon Web Services (AWS), das Sie unter folgender Adresse erstellen können: http://aws.amazon.com/rds/ Sie können auch eine voll funktionsfähige Testversion von Altova MissionKit oder einer beliebigen einzelnen Altova-Anwendung unter folgender Adresse herunterladen: https://www.altova.com/download-trial/
Erstellen Sie ein lokales Prototyp
Amazon RDS basiert auf MySQL, daher werden wir zunächst eine kleine, lokale Datenbank in der MySQL Community Edition erstellen, diese dann zu Amazon RDS migrieren und unsere Datenbank in der Cloud testen. Obwohl MySQL XML nicht als Datentyp für Datenbankspalten unterstützt, ermöglichen MySQL-Versionen 5.1 und 6.0 einige Operationen für XML-Daten, die als Text gespeichert sind. Für diese Übung werden wir einige der MySQL-XML-Beispiele anpassen und erweitern, die in den MySQL-Referenzressourcen unter den folgenden Links aufgeführt sind: 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 Zunächst haben wir DatabaseSpy gestartet und mit unserer lokalen MySQL Community Edition verbunden. Wir haben eine neue Datenquelle namens "LocalPrototype" erstellt und ein neues Datenbankschema entworfen, das wir "XMLtest" genannt haben. Hier werden das Online-Browser-Fenster und das Eigenschaftenfenster von DatabaseSpy angezeigt:
![]()
Als Nächstes haben wir zwei Tabellen mit den Namen "books" (Bücher) und "cities" (Städte) erstellt und Daten eingefügt, wobei wir uns an den Beispielen in der MySQL-Dokumentation orientiert haben. Hier ist eine Designansicht unserer Tabellen in DatabaseSpy:
![]()
Wir können bestimmte Abfragen ausführen und den Inhalt unserer Tabellen in gestapelten Ergebnisfenstern anzeigen
![]()
Bitte beachten Sie, dass die Spalte "doc" in der Tabelle "books" XML-Daten enthält, obwohl sie als "varchar(150)" definiert ist. MySQL unterstützt zwei Funktionen zur Verarbeitung von XML in Textfeldern: "ExtractValue()" und "UpdateXML()", die mithilfe von XPath-Ausdrücken auf einzelne Elemente zugreifen können. Im Folgenden finden Sie eine einfache "ExtractValue()"-Abfrage, die nur die Initialen des Autors aus jeder Zeile in der Tabelle "books" zurückgibt:
![]()
Die Funktion UpdateXML() kann verwendet werden, um den Inhalt einzelner XML-Elemente mithilfe eines SQL-Ausdrucks zu ändern. Im folgenden Screenshot aktualisiert die Abfrage in Zeile 1 jede Zeile unserer Tabelle "books", und die Abfrage in Zeile 2 gibt die neuen Werte zurück:
![]()
Wir können die Funktion Concat() auch verwenden, um XML-Elemente zu Daten hinzuzufügen, die keine XML-Daten sind, wie beispielsweise die Tabelle mit den Städten, wie im folgenden Beispiel gezeigt:
![]()
Bisher haben unsere XML-Abfragen alle Zeilen jeder Tabelle berücksichtigt. Um Abfragen für eine einzelne Zeile zu vereinfachen, ist es hilfreich, eine Spalte zur Tabelle hinzuzufügen, die einen eindeutigen Zeilenindex enthält. Wir können eine Kopie unserer Tabelle "books" erstellen und eine Spalte namens "id" hinzufügen, um den Zeilenindex zu speichern. Die Spalte "id" eignet sich auch gut als Fremdschlüssel, um von einer Zeile in einer anderen Tabelle auf ein einzelnes XML-Dokument in unserer Tabelle zu verweisen.
Beispielsweise können Sie eine Tabelle definieren, die die Namen von Bewerbern enthält, wobei ein Fremdschlüssel verwendet wird, um auf den im XML-Format gespeicherten Lebenslauf jedes Bewerbers zu verweisen. Dieser Lebenslauf wird in einer separaten Tabelle gespeichert. Sie können den SQL-Editor in DatabaseSpy verwenden, um eine CREATE-Anweisung für die bestehende Tabelle zu generieren und diese direkt zu bearbeiten, oder Sie können den DatabaseSpy Design-Editor verwenden, um die Tabelle grafisch zu erstellen. (Weitere Informationen finden Sie im Abschnitt DatabaseSpy auf der Altova-Website.)
Da wir planen, dieselben Abfragen später in Amazon RDS auszuführen, haben wir eine SQL-CREATE-Anweisung und mehrere SQL-INSERT-Anweisungen zu einem einzigen Skript für die Tabelle "books2" zusammengefasst. Der folgende Screenshot zeigt einen Ausschnitt aus diesem Skript für die Tabelle "books2":
![]()
Wir können eine Abfrage der Tabelle "books2" ausführen, die für jede Zeile die eindeutige ID-Spalte anzeigt:
![]()
Jetzt können wir unsere Funktionen UpdateXML() und ExtractValue() so erweitern, dass sie auf einzelne Zeilen angewendet werden können:
![]()
Dies gibt uns eine gute Grundlage an Beispielen, die wir in die Cloud hochladen und in Amazon RDS testen können.
Verbinden Sie DatabaseSpy mit dem Amazon RDS Cloud
Nachdem Sie die Anweisungen in der AWS Management Console befolgt haben, um eine Datenbankinstanz auf Amazon RDS zu erstellen, erleichtert der Verbindungsassistent den Start mit DatabaseSpy. Wählen Sie einfach die Option "MySQL" wie hier gezeigt:
![]()
Beim ersten Verbindungsaufbau müssen Sie einen neuen Datenquellenname (DSN) erstellen. Nach dem ersten Mal können Sie den DSN aus einer Liste auswählen, indem Sie die Option "Vorhandenen Datenquellennamen verwenden" wählen. Sie können sogar den ursprünglichen DSN wiederverwenden, wenn Sie von XMLSpy, MapForce oder StyleVision aus eine Verbindung herstellen möchten.
![]()
Im Verbindungsdialog sind folgende Informationen einzutragen:
- Name der Datenquelle: Dies ist der Name, der im Fenster "DatabaseSpy-Projekt" und in der Liste der vorhandenen Datenquellen angezeigt wird, wenn Sie sich erneut verbinden.
- Beschreibung: Informationen zur eigenen Information.
- Server: Dies ist der Name des Endpunkts, der in Ihrem Amazon RDS-Kontobereich angezeigt wird.
- Port: 3306 – Stellen Sie sicher, dass Ihre IT-Abteilung diesen Port nicht mit einer Firewall blockiert!
- Benutzername / Passwort: Dies ist ein Benutzer, den Sie in Amazon RDS eingerichtet haben.
- Datenbank: Der Standardname der Datenbank, den Sie bei der Einrichtung Ihrer RDS-Instanz festgelegt haben.
![]()
Wir haben uns mit unserer Amazon RDS-Cloud-Datenbank in demselben DatabaseSpy-Projekt verbunden, das wir für das lokale Prototyp entwickelt hatten. Hier ist ein Screenshot des Projektfensters, der sowohl die Namen der Datenquellen als auch die SQL-Dateien zeigt, die wir unserem Projekt hinzugefügt haben:
![]()
Bevor wir unsere Tabellen erstellen und die Abfragen ausführen, ist es interessant, die Versionen der einzelnen Systeme zu überprüfen. Die folgenden Screenshots zeigen eine Abfrage, die Versionsinformationen für jedes System anfordert. Beachten Sie, dass die graue Leiste direkt über jeder Abfrage angibt, welche Datenverbindung für die SQKL-Anweisung verwendet wird.
![]()
![]()
Laut den Berichten von Amazon RDS läuft dort Version 5.1 des MySQL Community Servers, genau wie bei unserem lokalen Prototyp – ein vielversprechendes Zeichen!
Migrieren Sie das lokale Projekt in die Cloud
Wir können jedes unserer ursprünglichen Skripte zur Tabellenerstellung öffnen und sie in der Cloud-Datenbank ausführen, indem wir im Eigenschaftenfenster das Ausführungsziel neu zuweisen
![]()
Die graue Leiste "Ausführungsziel" am oberen Rand des SQL-Editors zeigt die Cloud-Datenbank Amazon RDS als Ziel für die Abfrage an:
![]()
Nachdem wir auf ähnliche Weise die Tabellen "books" und "books2" erstellt haben, können wir jede der SQL-Abfragen in der Cloud-Datenbank ausführen. Beispiel für die Funktion "ExtractValue()" für alle Zeilen:
![]()
Eine Concat()-Abfrage, um XML-Ausgabe aus nicht-XML-Daten in einer Tabelle zu erstellen:
![]()
Beispiel für die Funktion UpdateXML() für eine einzelne Zeile in einer Tabelle.
![]()
ExtractValue() für eine einzelne Zeile:
![]()
Schlussfolgerung
Bei jedem Test, den wir durchgeführt haben, verhielt sich Amazon RDS genau wie die lokale MySQL-Community-Edition. Dieses Verhalten ermöglicht es Entwicklern, neue Cloud-Datenbankanwendungen oder Erweiterungen bestehender Anwendungen effizienter zu entwickeln und zu testen, ohne dabei die Kosten für Cloud-Ressourcen für die Entwicklungsphasen in Kauf nehmen zu müssen.
Wir haben auch die Funktionalität der MySQL-XML-Funktionen für XML-Daten überprüft, die in Textspalten in den Cloud-Datenbanken gespeichert sind. Unsere XML-Daten waren sehr begrenzt – die Textspalte in unserer Tabelle "Bücher" war auf 150 Zeichen beschränkt. MySQL ermöglicht es jedoch, viel größere XML-Dokumente in einer einzigen Spalte zu speichern. Jede Tabelle hat eine maximale Zeilengröße von 65.535 Bytes. Selbst wenn Ihre Tabelle eine Indexspalte verwendet, bedeutet dies, dass eine VARCHAR-Spalte für einen einzelnen XML-Eintrag mehr als 64 Kilobyte groß sein kann. Wenn Sie noch größere XML-Dokumente speichern müssen, bietet MySQL die Datentypen MediumText und LongText an, ähnlich wie BLOBs. MediumText kann mehr als 16 Millionen einzelne Zeichen speichern, und LongText kann bis zu 4 GB speichern. Obwohl dies in diesem Blogbeitrag nicht dargestellt wird, haben wir die Funktionen ExtractValue() und UpdateXML() erfolgreich mit den Datentypen MediumText und LongText getestet.
Wenn Sie große XML-Datendateien speichern müssen, kann das Schreiben von XPath-Ausdrücken zur Identifizierung einzelner Elemente zu einer Herausforderung in der Entwicklung werden. Der in XMLSpy enthaltene XPath-Analysator ist ein unschätzbares Werkzeug, das die Testung und Fehlersuche von XPath-Ausdrücken der Versionen 1.0 und 2.0 erleichtert. Während Sie einen XPath-Ausdruck in den Analysator eingeben, wertet XMLSpy ihn aus und zeigt das resultierende Knoten-Set in Echtzeit an. Dies kann Stunden der Fehlersuche sparen, die sonst für das Verständnis und die Behebung von XPath-Problemen aufgewendet würden.
In zukünftigen Blogbeiträgen werden wir weitere Möglichkeiten untersuchen, wie XMLSpy, MapForce, DiffDog und DatabaseSpy Entwicklern helfen können, die Entwicklung von Cloud-Anwendungen mit Amazon RDS zu beschleunigen. Wir freuen uns darauf, Sie bald wieder begrüßen zu dürfen! Wenn Sie selbst erfahren möchten, wie gut die Altova-Tools mit Amazon RDS zusammenarbeiten, können Sie eine kostenlose Testversion des Altova MissionKit herunterladen.