XML nel cloud

Lavorare con gli strumenti Altova e il servizio di database relazionali Amazon (Amazon RDS)

Sempre più aziende stanno scoprendo i vantaggi derivanti dall'implementazione di applicazioni di database nel cloud:

  • Elevata disponibilità e affidabilità
  • Scalabilità automatica
  • Assenza di costi relativi all'hardware e di esigenze di manutenzione

In questo articolo del blog, mostriamo come connettersi al servizio Amazon Relational Database Service (Amazon RDS) e come creare un piccolo database utilizzando Altova DatabaseSpy. Poiché l'utilità di connessione al database è uniforme in tutti i prodotti della suite Altova MissionKit, è possibile effettuare la connessione nello stesso modo utilizzando XMLSpy, MapForce o StyleVision.

Se desiderate seguire i passaggi descritti di seguito, dovrete registrarvi per un account Amazon Web Services (AWS) all'indirizzo: http://aws.amazon.com/rds/. Potete anche scaricare una versione di prova gratuita e completamente funzionante di Altova MissionKit o di qualsiasi applicazione Altova singolarmente, all'indirizzo: https://www.altova.com/download-trial/

Creare un prototipo locale

Amazon RDS si basa su MySQL, quindi creeremo un piccolo database locale utilizzando la versione Community di MySQL, per poi migrarlo su Amazon RDS e testare il nostro database nel cloud. Sebbene MySQL non supporti XML come tipo di dato per le colonne del database, le versioni 5.1 e 6.0 supportano alcune operazioni sui dati XML memorizzati come testo. Per questo esercizio, adatteremo ed estenderemo alcuni degli esempi di XML di MySQL presenti nelle risorse di riferimento di MySQL elencate qui: 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 Innanzitutto, abbiamo avviato DatabaseSpy e ci siamo connessi alla nostra installazione locale di MySQL Community Edition. Abbiamo creato una nuova fonte di dati, chiamata LocalPrototype, e abbiamo definito un nuovo schema di database, che abbiamo chiamato XMLtest. Le finestre del browser online e delle proprietà di DatabaseSpy sono mostrate qui:

Successivamente, abbiamo creato due tabelle, chiamate "books" e "cities", e abbiamo inserito i dati seguendo gli esempi presenti nella documentazione di MySQL. Ecco una rappresentazione grafica delle nostre tabelle, visualizzata con DatabaseSpy:

Possiamo eseguire query specifiche e visualizzare il contenuto delle nostre tabelle in finestre di risultati sovrapposte

Si noti che la colonna "doc" della tabella "books" contiene dati XML, sebbene sia stata definita come varchar(150). MySQL supporta due funzioni per lavorare con XML nei campi di testo: ExtractValue() e UpdateXML(), che possono operare su elementi singoli tramite espressioni XPath. Di seguito è riportata una semplice query ExtractValue() per restituire solo le iniziali dell'autore da ogni riga della tabella "books":

La funzione UpdateXML() può essere utilizzata per modificare il contenuto di singoli elementi XML utilizzando un'espressione SQL. Nella schermata qui sotto, la query alla riga 1 aggiorna ogni riga della nostra tabella "books", mentre la query alla riga 2 restituisce i nuovi valori:

Possiamo anche utilizzare la funzione Concat() per aggiungere elementi XML a dati non XML, come la tabella delle città, come mostrato di seguito:

Finora, le nostre query XML hanno operato su tutte le righe di ogni tabella. Per semplificare le query che riguardano una singola riga, è utile aggiungere una colonna alla tabella per contenere un indice univoco per ogni riga. Possiamo creare una copia della nostra tabella "books" e aggiungere una colonna chiamata "id" per contenere l'indice della riga. La colonna "id" può anche fungere da chiave esterna, consentendo di fare riferimento a un singolo documento XML nella nostra tabella a partire da una riga in un'altra tabella.

Ad esempio, potresti definire una tabella che contenga i nomi dei candidati, con una chiave esterna che faccia riferimento al curriculum vitae in formato XML di ciascun candidato, memorizzato in una tabella separata. È possibile utilizzare Editor SQL In DatabaseSpy, è possibile generare un'istruzione CREATE per la tabella "books" esistente e modificarla direttamente, oppure è possibile utilizzare DatabaseSpy per Redattore di design per creare la tabella in modo grafico. (Per maggiori informazioni, consultare la sezione relativa a...) DatabaseSpy sezione di Altova (Sito web.)

Poiché prevediamo di eseguire le stesse query in seguito su Amazon RDS, abbiamo combinato un'istruzione SQL CREATE e diverse istruzioni SQL INSERT in un unico script per la tabella "books2". Lo screenshot qui sotto mostra una parte dello script per "books2":

Possiamo eseguire una query sulla tabella "books2" che mostri la colonna "id" univoca per ogni riga

Ora possiamo migliorare le nostre query UpdateXML() ed ExtractValue() per farle operare su una singola riga:

Questo ci fornisce un buon insieme di esempi di base da utilizzare nel cloud e da testare su Amazon RDS.

Connettere DatabaseSpy al servizio Amazon RDS nel cloud

Dopo aver seguito le istruzioni nella console di gestione di AWS per creare un'istanza di database su Amazon RDS, l'Assistente di connessione semplifica l'avvio di DatabaseSpy. Basta selezionare l'opzione MySQL, come mostrato qui:

La prima volta che vi connettete, dovrete creare un nuovo nome di origine dati (DSN). Successivamente, potrete selezionare il DSN da un elenco, scegliendo l'opzione "Utilizza un nome di origine dati esistente". Potete persino utilizzare il DSN originale quando vi riconnettete da XMLSpy, MapForce o StyleVision.

Nella finestra di dialogo di connessione, inserire le seguenti informazioni:

  • Nome della sorgente dati: Questo è il nome che verrà visualizzato nella finestra del progetto DatabaseSpy e nell'elenco delle sorgenti dati esistenti quando vi riconnetterete.
  • Descrizione: Informazioni fornite a titolo informativo.
  • Server: Questo è il nome dell'endpoint che si trova nel pannello di controllo del vostro account Amazon RDS.
  • Porta: 3306 – assicuratevi che il vostro reparto IT non stia bloccando questa porta con un firewall!
  • Nome utente / Password: Si tratta di un utente che avete configurato in Amazon RDS.
  • Database: Il nome del database predefinito che è stato configurato al momento dell'avvio dell'istanza RDS.

Abbiamo collegato il nostro database cloud Amazon RDS nello stesso progetto DatabaseSpy che abbiamo creato per il prototipo locale. Ecco uno screenshot della finestra del progetto che mostra sia i nomi delle fonti dati che i file SQL che abbiamo aggiunto al nostro progetto:

Prima di creare le tabelle ed eseguire le query, sarà utile verificare le versioni di ciascun sistema. Gli screenshot qui sotto mostrano una query che richiede informazioni sulla versione di ciascun sistema. Si noti che la barra grigia situata immediatamente sopra ogni query indica a quale connessione dati è associata l'istruzione SQKL.

Secondo i report di Amazon RDS, il sistema è in esecuzione con la versione 5.1 del server MySQL Community, la stessa utilizzata nel nostro prototipo locale: un segno molto positivo!

Migrare il progetto locale al cloud

Possiamo aprire ciascuno dei nostri script originali per la creazione delle tabelle ed eseguirli nel database cloud, riassegnando il target di esecuzione nella finestra delle proprietà

La barra grigia "Obiettivo di esecuzione" situata nella parte superiore della finestra dell'editor SQL indica il database Amazon RDS nel cloud come obiettivo della query:

Dopo aver creato in modo simile le tabelle "books" e "books2", possiamo eseguire ciascuna delle query SQL nel database cloud. Esempio di utilizzo della funzione ExtractValue() per tutte le righe:

Query Concat() per creare un output XML a partire da dati non XML presenti in una tabella:

Esempio di utilizzo della funzione UpdateXML() per una singola riga in una tabella.

ExtractValue() per una singola riga:

Conclusione

In ogni test che abbiamo eseguito, Amazon RDS si è comportato esattamente come la versione community di MySQL installata localmente. Questo comportamento è molto più efficiente per gli sviluppatori, che possono creare e testare nuove applicazioni per database cloud, oppure apportare miglioramenti a quelle esistenti, senza sostenere i costi delle risorse cloud per le fasi di sviluppo.

Abbiamo inoltre verificato il funzionamento delle funzioni XML di MySQL per i dati XML memorizzati in colonne di testo nei database cloud. I nostri dati XML erano molto limitati: la colonna di testo nella tabella "libri" era limitata a 150 caratteri. Tuttavia, MySQL consente di memorizzare documenti XML molto più grandi in una singola colonna. Ogni tabella ha una dimensione massima per le righe di 65.535 byte. Anche se la tabella utilizza una colonna di indice, ciò significa che una colonna varchar per una singola voce XML potrebbe superare i 64 KB. Se è necessario memorizzare documenti XML ancora più grandi, MySQL offre i tipi di dati MediumText e LongText, simili ai BLOB. MediumText può contenere oltre 16 milioni di caratteri a singolo byte, mentre LongText può contenere fino a 4 GB. Sebbene non illustrato in questo articolo, abbiamo testato con successo le funzioni ExtractValue() e UpdateXML() con i tipi di dati MediumText e LongText.

Quando è necessario archiviare file di dati XML di grandi dimensioni, la scrittura di espressioni XPath per individuare singoli elementi può diventare una sfida nello sviluppo. L'analizzatore XPath incluso in XMLSpy è uno strumento prezioso che semplifica questo processo test e debug di espressioni XPath 1.0 e 2.0. Mentre digitate un'espressione XPath nell'analizzatore, XMLSpy la valuta in tempo reale e restituisce l'insieme di nodi risultante. Questo può far risparmiare ore di tempo dedicate al debug, evitando di dover cercare di capire e risolvere problemi relativi a XPath.

Nei prossimi articoli del blog, esploreremo altri modi in cui XMLSpy, MapForce, DiffDog e DatabaseSpy possono aiutare gli sviluppatori ad accelerare la creazione di applicazioni cloud con Amazon RDS. Non vediamo l'ora di rivedervi presto! Se desiderate constatare di persona quanto bene gli strumenti Altova funzionano con Amazon RDS, scaricate una versione di prova gratuita del Altova MissionKit.