XML en la nube

Trabajando con las herramientas de Altova y el servicio de base de datos relacional de Amazon (Amazon RDS)

Cada vez más empresas están descubriendo las ventajas de implementar aplicaciones de bases de datos en la nube:

  • Alta disponibilidad y fiabilidad
  • Escalado automático
  • Libertad de los costos de hardware y de los requisitos de mantenimiento

En esta entrada del blog, demostraremos cómo conectarse al servicio de bases de datos relacionales de Amazon (Amazon RDS) y cómo crear una pequeña base de datos utilizando Altova DatabaseSpy. Dado que el asistente de conexión a la base de datos es consistente en todo el conjunto Altova MissionKit, puede conectarse de la misma manera utilizando XMLSpy, MapForce o StyleVision.

Si desea seguir los pasos descritos a continuación, necesitará registrarse para obtener una cuenta de Amazon Web Services (AWS) en: http://aws.amazon.com/rds/. También puede descargar una versión de prueba gratuita y completamente funcional de Altova MissionKit o de cualquier aplicación individual de Altova en: https://www.altova.com/download-trial/

Crear un prototipo local

Amazon RDS se basa en MySQL, por lo que crearemos una pequeña base de datos local utilizando la versión Community de MySQL, luego migraremos a Amazon RDS y probaremos nuestra base de datos en la nube. Aunque MySQL no admite XML como tipo de dato para las columnas de la base de datos, las versiones 5.1 y 6.0 sí admiten algunas operaciones para datos XML almacenados como texto. Para este ejercicio, adaptaremos y ampliaremos algunos de los ejemplos de XML de MySQL que se encuentran en los recursos de referencia de MySQL listados aquí: 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 Primero, iniciamos DatabaseSpy y nos conectamos a nuestra instalación local de MySQL Community Edition. Hemos creado una nueva fuente de datos llamada LocalPrototype, y hemos diseñado un nuevo esquema de base de datos al que hemos llamado XMLtest. Aquí se muestran las ventanas del navegador en línea y de propiedades de DatabaseSpy

A continuación, creamos dos tablas llamadas "libros" y "ciudades" e insertamos datos siguiendo los ejemplos que se encuentran en la documentación de MySQL. Aquí se muestra una vista de diseño de nuestras tablas en DatabaseSpy:

Podemos ejecutar consultas específicas y mostrar el contenido de nuestras tablas en ventanas de resultados apiladas

Tenga en cuenta que la columna "doc" de la tabla "books" contiene datos en formato XML, aunque se definió como varchar(150). MySQL admite dos funciones para trabajar con XML en campos de texto: ExtractValue() y UpdateXML(), que pueden operar sobre elementos individuales mediante expresiones XPath. A continuación, se muestra una consulta sencilla de ExtractValue() para devolver solo las iniciales del autor de cada fila de la tabla "books":

La función UpdateXML() se puede utilizar para modificar el contenido de elementos XML individuales utilizando una expresión SQL. En la captura de pantalla que se muestra a continuación, la consulta en la línea 1 actualiza cada fila de nuestra tabla de libros, y la consulta en la línea 2 devuelve los nuevos valores:

También podemos utilizar la función Concat() para añadir elementos XML a datos que no son XML, como la tabla de ciudades, como se muestra a continuación:

Hasta ahora, nuestras consultas XML han operado sobre todas las filas de cada tabla. Para facilitar las consultas de una sola fila, es útil añadir una columna a la tabla que contenga un índice único para cada fila. Podemos crear una copia de nuestra tabla de libros y añadir una columna llamada "id" para almacenar el índice de la fila. La columna "id" también sirve como una clave foránea conveniente para referenciar un documento XML individual en nuestra tabla, a partir de una fila en otra tabla.

Por ejemplo, podría definir una tabla para almacenar los nombres de los candidatos a un puesto de trabajo, con una clave externa que haga referencia al currículum vitae en formato XML de cada candidato, almacenado en una tabla separada. Puede utilizar el Editor SQL de DatabaseSpy para generar una instrucción CREATE para la tabla de libros existente y editarla directamente, o puede utilizar el Editor de diseño de DatabaseSpy para crear la tabla de forma gráfica. (Para obtener más información, consulte la sección DatabaseSpy del sitio web de Altova.)

Dado que planeamos ejecutar las mismas consultas más adelante en Amazon RDS, combinamos una instrucción SQL CREATE y varias instrucciones SQL INSERT en un único script para la tabla "books2". La captura de pantalla que se muestra a continuación muestra parte del script para "books2":

Podemos ejecutar una consulta en la tabla "books2" que muestre la columna "id" (identificador) única para cada fila

Ahora podemos mejorar nuestras consultas UpdateXML() y ExtractValue() para que operen sobre una fila individual:

Esto nos proporciona un conjunto inicial de ejemplos útiles para trasladarlos a la nube y probarlos en Amazon RDS.

Conecte DatabaseSpy a la nube Amazon RDS

Una vez que siga las instrucciones en la consola de administración de AWS para crear una instancia de base de datos en Amazon RDS, el asistente de conexión facilita el inicio de uso de DatabaseSpy. Simplemente seleccione la opción de MySQL, como se muestra aquí:

La primera vez que se conecte, deberá crear un nuevo nombre de origen de datos (DSN). Después de la primera vez, podrá seleccionar el DSN de una lista, eligiendo la opción "Utilizar un nombre de origen de datos existente". Incluso puede utilizar el DSN original cuando se vuelva a conectar desde XMLSpy, MapForce o StyleVision.

En el cuadro de diálogo de conexión, complete la siguiente información:

  • Nombre de la fuente de datos: Este es el nombre que se mostrará en la ventana del proyecto DatabaseSpy y en la lista de fuentes de datos existentes cuando se vuelva a conectar.
  • Descripción: Información para su referencia personal.
  • Servidor: Este es el nombre del punto de acceso que aparece en el panel de control de su cuenta de Amazon RDS.
  • Puerto: 3306 – asegúrese de que su departamento de informática no esté bloqueando este puerto con un firewall.
  • Usuario / Contraseña: Este es un usuario que usted configuró en Amazon RDS.
  • Base de datos: El nombre de la base de datos predeterminado que configuró al iniciar su instancia de RDS.

Nos conectamos a nuestra base de datos en la nube Amazon RDS dentro del mismo proyecto de DatabaseSpy que habíamos creado para el prototipo local. Aquí hay una captura de pantalla de la ventana del proyecto, que muestra tanto los nombres de las fuentes de datos como los archivos SQL que utilizamos y que hemos añadido al proyecto:

Antes de crear nuestras tablas y ejecutar las consultas, será interesante verificar las versiones de cada sistema. Las capturas de pantalla que se muestran a continuación ilustran una consulta que solicita información de versión para cada sistema. Observe que la barra gris que se encuentra justo encima de cada consulta indica a qué conexión de datos está asignada la instrucción SQKL.

Según los informes de Amazon RDS, se está utilizando la versión 5.1 del servidor MySQL Community, la misma que en nuestro prototipo local, ¡lo cual es una señal muy positiva!

Migrar el proyecto local a la nube

Podemos abrir cada uno de nuestros scripts originales de creación de tablas y ejecutarlos en la base de datos en la nube, reasignando el destino de la ejecución en la ventana de propiedades

La barra gris de "Objetivo de ejecución" que se encuentra cerca de la parte superior de la ventana del editor SQL identifica la base de datos Amazon RDS en la nube como el objetivo de la consulta:

Después de crear de manera similar las tablas "books" y "books2", podemos ejecutar cada una de las consultas SQL en la base de datos en la nube. Ejemplo del uso de la función ExtractValue() para todas las filas:

Consulta Concat() para generar una salida XML a partir de datos no XML que se encuentran en una tabla:

Ejemplo de cómo usar la función UpdateXML() para actualizar una sola fila en una tabla.

ExtraerValor() para una sola fila:

Conclusión

En cada prueba que realizamos, Amazon RDS se comportó exactamente como la edición comunitaria local de MySQL. Este comportamiento facilita mucho el trabajo de los desarrolladores para crear y probar nuevas aplicaciones de bases de datos en la nube, o para realizar mejoras en aplicaciones existentes, sin incurrir en los costos de los recursos en la nube durante las fases de desarrollo.

También verificamos el funcionamiento de las funciones XML de MySQL para datos XML almacenados en columnas de texto en las bases de datos en la nube. Nuestros datos XML eran muy limitados: la columna de texto en nuestra tabla de libros estaba limitada a 150 caracteres. Sin embargo, MySQL permite almacenar documentos XML mucho más grandes en una sola columna. Cada tabla tiene un tamaño máximo de fila de 65.535 bytes. Incluso si su tabla utiliza una columna de índice, esto significa que una columna varchar para una sola entrada XML podría superar los 64 KB. Si necesita almacenar documentos XML aún más grandes, MySQL ofrece los tipos de datos MediumText y LongText, similares a los BLOB. MediumText puede almacenar más de 16 millones de caracteres de un solo byte, y LongText puede almacenar hasta 4 GB. Aunque no se ilustra en esta publicación, hemos probado con éxito las funciones ExtractValue() y UpdateXML() con los tipos de datos MediumText y LongText.

Cuando necesita almacenar archivos de datos XML de gran tamaño, la creación de expresiones XPath para identificar elementos individuales puede convertirse en un desafío de desarrollo. El analizador XPath incluido en XMLSpy es una herramienta invaluable que facilita la prueba y depuración de expresiones XPath 1.0 y 2.0. A medida que escribe una expresión XPath en el analizador, XMLSpy la evalúa y muestra el conjunto de nodos resultante en tiempo real. Esto puede ahorrar horas de tiempo de depuración dedicadas a intentar comprender y solucionar problemas relacionados con XPath.

En futuras publicaciones del blog, exploraremos otras formas en que XMLSpy, MapForce, DiffDog y DatabaseSpy pueden ayudar a los desarrolladores a acelerar la creación de aplicaciones en la nube con Amazon RDS. ¡Esperamos verlos de nuevo pronto! Si desean comprobar por sí mismos cómo funcionan las herramientas de Altova con Amazon RDS, descarguen una versión de prueba gratuita del Altova MissionKit.