XML in de cloud

Werken met Altova-tools en de Amazon Relational Database Service (Amazon RDS)

Steeds meer bedrijven ontdekken de voordelen van het implementeren van database-applicaties in de cloud:

  • Hoge beschikbaarheid en betrouwbaarheid
  • Automatische schaalvergroting
  • Vrijheid van hardwarekosten en onderhoudsvereisten

In dit blogbericht laten we zien hoe u verbinding kunt maken met de Amazon Relational Database Service (Amazon RDS) en een kleine database kunt aanmaken met behulp van Altova DatabaseSpy. Omdat de databaseverbindingstool consistent is in de Altova MissionKit, kunt u op dezelfde manier verbinding maken met behulp van XMLSpy, MapForce of StyleVision.

Als u de stappen hieronder zelf wilt volgen, moet u zich aanmelden voor een Amazon Web Services (AWS) account via: http://aws.amazon.com/rds/ U kunt ook een volledig functionerende, gratis proefversie van Altova MissionKit of een individuele Altova-applicatie downloaden via: https://www.altova.com/download-trial/

Maak een lokaal prototype

Amazon RDS is gebaseerd op MySQL, dus we gaan een kleine, lokale database aanmaken in de MySQL Community Edition, waarna we deze migreren naar Amazon RDS en onze database in de cloud testen. Hoewel MySQL XML niet ondersteunt als een datatypen voor databasekolommen, ondersteunen MySQL 5.1 en 6.0 wel bepaalde bewerkingen voor XML-gegevens die zijn opgeslagen als tekst. Voor deze oefening zullen we enkele van de MySQL XML-voorbeelden aanpassen en uitbreiden die te vinden zijn in de MySQL-referentiemateriaalbronnen, te vinden op de volgende links: 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 Allereerst hebben we DatabaseSpy gestart en verbonden met onze lokale MySQL Community Edition. We hebben een nieuwe databron aangemaakt, genaamd LocalPrototype, en een nieuw database-schema gecreëerd, dat we XMLtest hebben genoemd. Hier worden de online browser en het venster met eigenschappen van DatabaseSpy weergegeven:

Vervolgens hebben we twee tabellen gemaakt, genaamd "boeken" en "steden", en data ingevoerd volgens de voorbeelden in de MySQL-documentatie. Hieronder ziet u een overzicht van onze tabellen in DatabaseSpy:

We kunnen specifieke queries uitvoeren en de inhoud van onze tabellen weergeven in gestapelde resultatenvensters:

Let op dat de kolom "doc" in de tabel "books" XML-gegevens bevat, hoewel deze is gedefinieerd als varchar(150). MySQL ondersteunt twee functies voor het werken met XML in tekstvelden: ExtractValue() en UpdateXML(), die op individuele elementen kunnen werken via XPath-expressies. Hieronder staat een eenvoudige ExtractValue()-query om alleen de initialen van de auteur uit elke rij in de tabel "books" op te halen:

De functie UpdateXML() kan worden gebruikt om de inhoud van individuele XML-elementen te wijzigen met behulp van een SQL-expressie. In de onderstaande screenshot wijzigt de query op regel 1 de inhoud van elke rij in onze tabel met boeken, en de query op regel 2 retourneert de nieuwe waarden:

We kunnen de functie Concat() ook gebruiken om XML-elementen toe te voegen aan niet-XML-gegevens, zoals de tabel met steden, zoals hieronder wordt weergegeven:

Tot nu toe hebben onze XML-query's gewerkt op alle rijen van elke tabel. Om query's voor een enkele rij te vereenvoudigen, is het handig om een kolom toe te voegen aan de tabel om een uniek rij-indexnummer op te slaan. We kunnen een kopie maken van onze "boeken"-tabel en een kolom toevoegen met de naam "id" om het rij-indexnummer op te slaan. De "id"-kolom kan ook dienen als een handige externe sleutel om een specifiek XML-document in onze tabel te refereren vanuit een rij in een andere tabel.

Bijvoorbeeld, u kunt een tabel definiëren die de namen van sollicitanten bevat, met een externe sleutel die verwijst naar het in XML-formaat opgeslagen curriculum vitae van elke kandidaat, opgeslagen in een aparte tabel. U kunt de SQL-editor in DatabaseSpy gebruiken om een CREATE-statement te genereren voor de bestaande tabel met boeken en deze direct te bewerken, of u kunt de ontwerpeditor van DatabaseSpy gebruiken om de tabel grafisch op te bouwen. (Voor meer informatie, zie het DatabaseSpy-gedeelte van de Altova-website.)

Aangezien we van plan zijn om dezelfde queries later uit te voeren in Amazon RDS, hebben we een SQL CREATE-statement en SQL INSERT-statements samengevoegd tot één script voor de tabel "books2". De onderstaande screenshot toont een deel van dit script voor "books2":

We kunnen een query uitvoeren op de tabel "books2" die de unieke ID-kolom voor elke rij weergeeft:

Nu kunnen we onze UpdateXML() en ExtractValue() functies verbeteren, zodat ze kunnen werken met individuele rijen:

Dit geeft ons een goede basisset van voorbeelden die we naar de cloud kunnen brengen en in een Amazon RDS-omgeving kunnen testen.

Verbind DatabaseSpy met de Amazon RDS cloud

Nadat u de instructies in de AWS Management Console hebt gevolgd om een database-instantie op Amazon RDS aan te maken, maakt de verbindingswizard het eenvoudig om met DatabaseSpy aan de slag te gaan. Kies eenvoudigweg de MySQL-optie, zoals hieronder wordt weergegeven:

De eerste keer dat u verbinding maakt, moet u een nieuwe DSN (Data Source Name) aanmaken. Na die eerste keer kunt u een bestaande DSN selecteren uit een lijst door de optie "Gebruik een bestaande databronnaam" te kiezen. U kunt zelfs de oorspronkelijke DSN opnieuw gebruiken wanneer u vanuit XMLSpy, MapForce of StyleVision verbinding maakt.

In het verbindingsvenster, vul de volgende informatie in:

  • Naam van de databron: Dit is de naam die vermeld zal worden in het DatabaseSpy-projectvenster en in de lijst met bestaande databronnen wanneer u opnieuw verbinding maakt.
  • Beschrijving: Informatie ter informatie, voor uw eigen referentie.
  • Server: Dit is de naam van de endpoint, zoals vermeld in het dashboard van uw Amazon RDS-account.
  • Poort: 3306 – zorg ervoor dat uw IT-afdeling deze poort niet blokkeert met een firewall!
  • Gebruikersnaam / Wachtwoord: Dit is een gebruikersaccount die u heeft aangemaakt in Amazon RDS.
  • Database: De standaardnaam van de database die u hebt ingesteld toen u uw RDS-instantie hebt gestart.

We hebben verbinding gemaakt met onze Amazon RDS cloud-database binnen hetzelfde DatabaseSpy-project dat we hadden ontwikkeld voor het lokale prototype. Hieronder een screenshot van het projectvenster, waarin zowel de namen van de databronnen als de SQL-bestanden die we aan ons project hebben toegevoegd, te zien zijn:

Voordat we onze tabellen aanmaken en de queries uitvoeren, is het interessant om de versies van elk systeem te controleren. De onderstaande screenshots tonen een query die versie-informatie opvraagt voor elk systeem. Let op dat de grijze balk direct boven elke query aangeeft welke dataconnectie aan de SQKL-statement is gekoppeld.

Volgens de rapporten van Amazon RDS draait de server versie 5.1 van de MySQL Community Server, dezelfde versie als ons lokale prototype – een veelbelovend teken!

Migreer het lokale project naar de cloud

We kunnen elk van onze oorspronkelijke scripts voor het aanmaken van tabellen openen en deze uitvoeren in de cloud-database door het uitvoeringsdoel opnieuw toe te wijzen in het eigenschappenvenster

De grijze balk met de tekst "Execution Target" (doel van de uitvoering) aan de bovenkant van het venster van de SQL-editor geeft aan dat de cloud-database Amazon RDS het doel is van de query:

Nadat we op dezelfde manier de tabellen "books" en "books2" hebben aangemaakt, kunnen we elk van de SQL-query's in de cloud-database uitvoeren. Voorbeeld van het gebruik van de functie ExtractValue() voor alle rijen:

Een Concat() query om XML-uitvoer te genereren op basis van niet-XML-gegevens in een tabel:

Voorbeeld van de functie UpdateXML() voor een enkele rij in een tabel.

ExtractValue() voor een enkele rij:

Conclusie

In elke test die we uitvoerden, gedroeg Amazon RDS zich precies zoals de lokale MySQL community-editie. Dit gedrag maakt het voor ontwikkelaars veel efficiënter om nieuwe cloud-databaseapplicaties te ontwikkelen en te testen, of om bestaande applicaties te verbeteren, zonder dat ze de kosten van cloudresources hoeven te betalen voor ontwikkelingscycli.

We hebben ook de werking van de MySQL XML-functies geverifieerd voor XML-gegevens die zijn opgeslagen in tekstkolommen in de clouddatabases. Onze XML-gegevens waren zeer beperkt; de tekstkolom in onze tabel met boeken was beperkt tot 150 tekens. Echter, MySQL stelt u in staat om veel grotere XML-documenten in één enkele kolom op te slaan. Elke tabel heeft een maximale rijgrootte van 65.535 bytes. Zelfs als uw tabel een indexkolom gebruikt, betekent dit dat een varchar-kolom voor één XML-item meer dan 64.000 bytes kan bevatten. Als u nog grotere XML-documenten moet opslaan, biedt MySQL de datatypes MediumText en LongText, vergelijkbaar met BLOBs. MediumText kan meer dan 16 miljoen enkele bytes aan tekens bevatten, en LongText kan tot 4 GB opslaan. Hoewel dit niet in deze blogpost wordt geïllustreerd, hebben we de functies ExtractValue() en UpdateXML() succesvol getest met de datatypes MediumText en LongText.

Wanneer u grote XML-gegevensbestanden moet opslaan, kan het schrijven van XPath-expressies om individuele elementen te identificeren een uitdaging vormen. De XPath-analyzer die bij XMLSpy wordt geleverd, is een onmisbaar hulpmiddel dat het testen en debuggen van XPath 1.0- en 2.0-expressies vergemakkelijkt. Terwijl u een XPath-expressie in de analyzer typt, evalueert XMLSpy deze en geeft het de resulterende verzameling knooppunten direct weer. Dit kan u uren aan debugtijd besparen, die u anders zou besteden aan het proberen te begrijpen en op te sporen van XPath-problemen.

In toekomstige blogposts zullen we andere manieren onderzoeken waarop XMLSpy, MapForce, DiffDog en DatabaseSpy ontwikkelaars kunnen helpen bij het versnellen van de ontwikkeling van cloudapplicaties met Amazon RDS. We kijken ernaar uit u binnenkort weer te zien! Als u zelf wilt ervaren hoe goed de Altova-tools werken met Amazon RDS, download dan een gratis proefversie van de Altova MissionKit.