Sistemas de Gestión de Bases de Datos XML (I): eXist
eXist es un sistema de gestión de bases de datos XML nativo, de código abierto, que integra técnicas avanzadas como búsquedas de términos, por proximidad o basadas en expresiones regulares. Funciona con los sistemas operativos Linux, Windows y Mac OS. Entre sus componentes encontramos un motor totalmente escrito en Java y cuenta con distintos módulos de almacenamiento. Soporta los estándares de consulta XPath, XQuery y XSLT, además de extensiones propias para la actualización.
Los documentos se encuentran almacenados en colecciones, que a su vez pueden estar anidadas. No es necesario que tengan una DTD o XML Schema asociado. Como gestor, indexa de forma automática todos los documentos, utilizando índices numéricos que permiten identificar los nodos del mismo (elementos, atributos, texto y comentarios). Los índices se basan en árboles B+ y están definidos a nivel de colección para optimizar el rendimiento. Mientras se lleva a cabo la indexación, se asigna un identificador único a cada documento de la colección.
Un aspecto importante, que nos lleva a ahorrar espacio, es el hecho de que los nombres de los nodos no sean utilizados para construir el índice, sino que, en su lugar, se asocie el nombre del elemento y de los atributos con una serie de identificadores numéricos en una tabla. Cada entrada del índice consiste en registros con clave <id colección, id nombre> y una relación de valores.
Este SGBD puede funcionar de varias formas:
- Como servidor autónomo.
- Insertado dentro de una aplicación Java.
- En un servidor J2EE (plataforma de programación para desarrollar y ejecutar software de aplicaciones en el lenguaje de programación Java), con los protocolos XML-RPC, SOAP y WebDAV.
Dependiendo de la forma en que funcione el servidor, se podrá acceder de un modo u otro. Se puede decir que lo más común es a través del API XML:DB para Java.
Cuenta con funciones de copia de seguridad a través de Java o de Unix. Cuando se realiza el backup lo que se lleva a cabo es la exportación del contenido de la base de datos como documentos XML estándar y se genera una jerarquía de directorios a imagen de la existente para las colecciones. Del mismo modo, se guarda información sobre configuración de índices, usuarios y un archivo especial denominado __contents__.xml con metadatos sobre el contenido, como pueden ser permisos, fechas de modificación…
Tiene funcionalidades de recuperación en caso de caída del sistema, deshaciendo transacciones incompletas y rehaciendo las terminadas, pero no reflejadas, aunque hay que aclarar que este soporte es sólo para fallos del sistema y no es accesible para transacciones desde las APIs.