XML na nuvem

Trabalhar com as ferramentas Altova e o serviço de base de dados relacional da Amazon (Amazon RDS)

Cada vez mais empresas estão a descobrir as vantagens de implementar aplicações de bases de dados na nuvem:

  • Alta disponibilidade e fiabilidade
  • Escalonamento automático
  • Liberdade de custos de equipamento e de requisitos de manutenção

Neste artigo do blog, demonstramos como estabelecer uma ligação ao serviço Amazon Relational Database Service (Amazon RDS) e como criar uma pequena base de dados utilizando o Altova DatabaseSpy. Uma vez que o assistente de ligação à base de dados é consistente em todo o Altova MissionKit, pode estabelecer a ligação da mesma forma utilizando o XMLSpy, o MapForce ou o StyleVision.

Se desejar seguir os passos descritos abaixo, precisará criar uma conta na Amazon Web Services (AWS) em: http://aws.amazon.com/rds/ Também pode descarregar uma versão de avaliação gratuita e totalmente funcional do Altova MissionKit ou de qualquer aplicação Altova individual em: https://www.altova.com/download-trial/

Construir um protótipo local

O Amazon RDS é baseado no MySQL, por isso, vamos criar uma pequena base de dados local na versão Community Edition do MySQL, e depois migrá-la para o Amazon RDS, para testar a nossa base de dados na nuvem. Embora o MySQL não suporte o XML como um tipo de dados para colunas de base de dados, as versões 5.1 e 6.0 do MySQL suportam algumas operações para dados XML armazenados como texto. Para este exercício, vamos adaptar e expandir alguns dos exemplos de XML do MySQL disponíveis nos recursos de referência do MySQL listados aqui: 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 Primeiramente, iniciámos o DatabaseSpy e estabelecemos uma ligação à nossa instalação local do MySQL Community Edition. Criámos uma nova fonte de dados, denominada "LocalPrototype", e criámos um novo esquema de base de dados, que chamámos "XMLtest". As janelas do navegador online e das propriedades do DatabaseSpy são mostradas aqui:

Em seguida, criámos duas tabelas, chamadas "books" (livros) e "cities" (cidades), e inserimos dados seguindo os exemplos da documentação do MySQL. Aqui está uma representação visual das nossas tabelas no DatabaseSpy:

Podemos executar consultas específicas e exibir o conteúdo das nossas tabelas em janelas de resultados organizadas verticalmente

Note que a coluna "doc" da tabela "books" contém dados XML, embora tenha sido definida como varchar(150). O MySQL suporta duas funções para trabalhar com XML em campos de texto: ExtractValue() e UpdateXML(), que podem operar em elementos individuais através de expressões XPath. A seguir, apresentamos uma consulta simples de ExtractValue() para retornar apenas as iniciais do autor de cada linha na tabela "books":

A função UpdateXML() pode ser utilizada para modificar o conteúdo de elementos XML individuais, utilizando uma expressão SQL. Na captura de ecrã abaixo, a consulta na linha 1 atualiza todas as linhas da nossa tabela de livros, e a consulta na linha 2 retorna os novos valores:

Podemos também utilizar a função Concat() para adicionar elementos XML a dados que não são XML, como a tabela de cidades, conforme demonstrado abaixo:

Até agora, as nossas consultas XML têm operado em todas as linhas de cada tabela. Para facilitar as consultas de uma única linha, é útil adicionar uma coluna à tabela para conter um índice único para cada linha. Podemos criar uma cópia da nossa tabela de livros e adicionar uma coluna chamada "id" para armazenar o índice da linha. A coluna "id" também serve como uma chave estrangeira conveniente para referenciar um documento XML individual na nossa tabela, a partir de uma linha numa outra tabela.

Por exemplo, pode definir uma tabela para conter os nomes dos candidatos a emprego, com uma chave estrangeira para referenciar o currículo formatado em XML de cada candidato, que está armazenado numa tabela separada. Pode usar o Editor SQL no DatabaseSpy para gerar uma instrução CREATE para a tabela de livros existente e editá-la diretamente, ou pode usar o Editor de Design do DatabaseSpy para criar a tabela graficamente. (Para mais informações, consulte a secção DatabaseSpy do site Altova.)

Como pretendemos executar as mesmas consultas mais tarde no Amazon RDS, combinámos uma instrução SQL CREATE e várias instruções SQL INSERT numa única script para a tabela "books2". A captura de ecrã abaixo mostra parte da script para a tabela "books2":

Podemos executar uma consulta na tabela "books2" que mostre a coluna "id" única para cada linha:

Agora podemos aprimorar as nossas consultas UpdateXML() e ExtractValue() para que atuem numa linha específica:

Isto fornece-nos um conjunto de exemplos de boa qualidade para serem transferidos para a nuvem e testados numa instância Amazon RDS.

Conecte o DatabaseSpy à plataforma Amazon RDS na nuvem

Depois de seguir as instruções no Painel de Gestão da AWS para criar uma instância de base de dados no Amazon RDS, o Assistente de Conexão facilita o início de utilização do DatabaseSpy. Basta selecionar a opção MySQL, como mostrado aqui:

Na primeira vez que se conectar, será necessário criar um novo nome de origem de dados (DSN). Após a primeira vez, poderá selecionar o DSN a partir de uma lista, escolhendo a opção "Utilizar um nome de origem de dados existente". Pode até mesmo utilizar o DSN original quando voltar a conectar a partir do XMLSpy, MapForce ou StyleVision.

Na janela de configuração da conexão, preencha as seguintes informações:

  • Nome da fonte de dados: Este é o nome que será exibido na janela do projeto DatabaseSpy e na lista de fontes de dados existentes quando se voltar a conectar.
  • Descrição: Informação para sua própria consulta.
  • Servidor: Este é o nome do endpoint que aparece no painel da sua conta Amazon RDS.
  • Porta: 3306 – certifique-se de que o seu departamento de TI não está a bloquear esta porta com um firewall!
  • Utilizador / Palavra-passe: Este é um utilizador que configurou no Amazon RDS.
  • Base de dados: O nome da base de dados padrão que configurou ao iniciar a sua instância RDS.

Conectámo-nos à nossa base de dados Amazon RDS na nuvem, utilizando o mesmo projeto DatabaseSpy que criámos para o protótipo local. Aqui está uma captura de ecrã da janela do projeto, que mostra os nomes das fontes de dados e os ficheiros SQL que adicionámos ao nosso projeto:

Antes de criarmos as tabelas e executarmos as consultas, será interessante verificar as versões de cada sistema. As capturas de ecrã abaixo mostram uma consulta que solicita informações de versão para cada sistema. Note que a barra cinza, localizada imediatamente acima de cada consulta, indica a qual ligação de dados a instrução SQKL está associada.

A Amazon RDS informa que está a utilizar a versão 5.1 do MySQL Community Server, a mesma que estamos a usar no nosso protótipo local – um bom sinal!

Migrar o projeto local para a nuvem

Podemos abrir cada um dos nossos scripts originais de criação de tabelas e executá-los na base de dados na nuvem, reatribuindo o alvo de execução na janela de propriedades

A barra cinza "Alvo de Execução", localizada na parte superior da janela do editor SQL, identifica o banco de dados Amazon RDS na nuvem como o alvo da consulta:

Depois de criar as tabelas "books" e "books2" de forma semelhante, podemos executar cada uma das consultas SQL na base de dados na nuvem. Exemplo de utilização da função ExtractValue() para todas as linhas:

Consulta Concat() para criar um ficheiro XML a partir de dados não XML numa tabela:

Exemplo de como usar a função UpdateXML() para atualizar uma única linha numa tabela.

ExtrairValor() para uma única linha:

Conclusão

Em todos os testes que realizámos, o Amazon RDS comportou-se exatamente como a edição comunitária local do MySQL. Este comportamento torna o processo muito mais eficiente para os desenvolvedores criarem e testarem novas aplicações de bases de dados na nuvem, ou melhorarem aplicações existentes, sem incorrer nos custos dos recursos da nuvem para as fases de desenvolvimento.

Verificámos também o funcionamento das funções XML do MySQL para dados XML armazenados em colunas de texto nas bases de dados na nuvem. Os nossos dados XML eram bastante limitados: a coluna de texto na nossa tabela de livros estava limitada a 150 caracteres. No entanto, o MySQL permite armazenar documentos XML muito maiores numa única coluna. Cada tabela tem um tamanho máximo de linha de 65.535 bytes. Mesmo que a sua tabela utilize uma coluna de índice, isso significa que uma coluna varchar para uma única entrada XML pode ter mais de 64.000 bytes. Se precisar de armazenar documentos XML ainda maiores, o MySQL oferece os tipos de dados MediumText e LongText, semelhantes aos BLOBs. O MediumText pode armazenar mais de 16 milhões de caracteres de um único byte, e o LongText pode armazenar até 4 GB. Embora não ilustrado neste artigo, testámos com sucesso as funções ExtractValue() e UpdateXML() com os tipos de dados MediumText e LongText.

Quando é necessário armazenar ficheiros de dados XML de grande dimensão, a criação de expressões XPath para identificar elementos individuais pode tornar-se um desafio no desenvolvimento. O analisador XPath incluído no XMLSpy é uma ferramenta indispensável que facilita o Testes e depuração de expressões XPath 1.0 e 2.0. À medida que escreve uma expressão XPath no analisador, o XMLSpy avalia-a em tempo real e apresenta o conjunto de nós resultante. Isto pode poupar horas de trabalho de depuração, que seriam normalmente gastas a tentar compreender e resolver problemas relacionados com XPath.

Em futuros artigos do blog, exploraremos outras formas como o XMLSpy, o MapForce, o DiffDog e o DatabaseSpy podem ajudar os desenvolvedores a acelerar a criação de aplicações na nuvem com o Amazon RDS. Esperamos revê-lo em breve! Se quiser verificar pessoalmente como as ferramentas da Altova funcionam com o Amazon RDS, descarregue uma versão de avaliação gratuita do Altova MissionKit.