Versant es un Sistema Gestor de Base de Datos Orientada a Objetos (SGBDOO) desarrollado por Versant Corporation.
Versant también tiene facilidades para poder usar tipos definidos por terceras personas a través de librerías
Se puede establecer un protocolo de autenticación propio
El acceso a las diferentes herramientas de Versant ya esta predefinido. No todos los usuarios pueden acceder a todas las herramientas
Antes de usar una base de datos, método, tipo de datos u objeto persistente se tiene que abrir una sesión. Solo se puede abrir una sesión por proceso o hilo. Al crear una sesión se crean los siguientes espacios en memoria:
Tipos de Sesiones:
Versant soporta transacciones cortas y largas en el contexto de una sesión. Las transacciones cortas son unidades lógicas de trabajo bajo el control de la aplicación. Una aplicación puede hacer explícitamente commit o roll back de una transacción corta o introducir un punto de guardado para la transacción. Cuando una sesión empieza o una transacción corta finaliza, una nueva transacción corta comienza automáticamente. Sin embargo, debes tener activados el login y el cerrojo de la base de datos. Si una transacción se trocea en más de una base de datos, se invoca automáticamente un commit en dos fases en el tiempo del commit. Las transacciones cortas cumplen con las propiedades ACID y dos más, estas son Coordinated, que hace que los objetos en una transacción estén bloqueados, y Ever-present, que te obliga a estar siempre en una transacción corta, cuando acaba una transacción corta comienza otra. Las transacciones largas comienzan y finalizan por defecto cuando la sesión comienza y finaliza. Sin embargo, puedes entrar a una transacción larga previa, esto es hacer que la transacción larga continúe en una sesión siguiente especificando el nombre y tiempo de comienzo. Se puede cambiar entre múltiples transacciones largas parando y recomenzando sesiones.
Hay dos tipos de cerrojos para el control de concurrencia, cerrojos cortos y cerrojos persistentes. Los cerrojos cortos se aplican sobre los objetos. Hay varios tipos de cerrojos cortos, como son de escritura, de actualización, de lectura (que pueden ser compartidos) y los llamados cerrojos nulos (usados para lecturas sucias). Se puede poner que las aplicaciones que esperan por un cerrojo acaben por tiempo. Los deadlocks en una sola base de datos son detectados y reportados inmediatamente por Versant. Usa un mecanismo de timeoup para detectar deadlocks entre múltiples bases de datos. Los cerrojos persistentes se mantienen al final de las sesiones. Tenemos varios tipos de cerrojos persistentes: de escritura, de lectura y nulos. También se puede indicar si el cerrojo se puede romper por otras aplicaciones (hard) o no (soft). Versant tiene un conjunto extenso de mecanismos de control de concurrencia y de tipos de cerrojos para activar y desactivar operaciones en el contexto de múltiples transacciones largas, mucho más extensos que los que pueda ofrecer actualmente cualquier SGBD relaccional. Esto hace posible ajustar los servicios de la base de datos evitando algunos comportamientos para ajustarse a los requerimientos de la aplicación. Sin embargo, esto es peligroso, hay que preparar bien una teoría de control de la concurrencia y unos modelos para bloquear comportamientos antes de empezar a ajustar el sistema de bloqueos de Versant.
Para asegurarse de la integridad se utiliza commits en dos fases. El commit en dos fases involucra un procedimiento en el que se comunican todas las bases para confirmar que se han guardado todos los cambios.
Versant añade soporte de protocolos optimistas en casos de que se vayan a realizar pocas escrituras en la base de datos. Para poder usarlo hay que definirlo al iniciar la sesión.
Versant almacena todas las versiones por las que haya pasado un objeto. Esto es una forma de mantener un log de todos los estados del objeto. Esto también facilita la utilización concurrente de un objeto, ya que la lectura de un objeto también crea una nueva versión. En Versant hay tres tipos de estados para las versiones de un objeto:
También se puede cambiar el estado de un objeto versionado, por lo que si realmente se querría borrar un estado Released habría que bajarlo antes a estado Working y luego borrarlo.
El tipo bi-links, mejora la integridad al poder referenciarse entre dos objetos de manera bi-direccional. Esto, además, permite más facilidades de borrado en cascada.
Versant permite la eliminación de objetos no referenciados que no son de sistema de manera automática. Sin embargo hay que tener cuidado en tener todos los objetos referenciados o podemos perderlos. Una manera de evitar que un objeto se pueda por la recogida de basuras es definir una clase root (de sistema) y hacerlo hijo de esa clase.
Para evitar los bloqueos mortales Versant asigna un tiempo límite que puede estar esperando una transacción. Si ese tiempo es superado aborta la transacción y manda un aviso de posible deadlock
Versant provee dos mecanismos diferentes para realizar backups. El ADB puede hacer copias de seguridad en línea o incremental. Una copia de seguridad en línea solo puede ser usada para restaurar una base de datos corrupta a un estado correcto previo, cuando se hizo el backup. Un backup incremental tiene un diario de rollforward asociado, que mantiene guardado toda la actividad de la base de datos que ocurre entre operaciones de backup. Se puede usar este diario para llegar al punto de la última transacción errónea.
Se puede usar el Servidor de Tolerancia a Fallos Versant, que es un replicador síncrono, para mantener las bases de datos libres de errores. Los contenidos de una base de datos pueden ser duplicadas a otra base de datos local o remota para formar un par de bases de datos iguales. Cuando una base de datos no puede ser accedida Versant continúa usando la restante. Cuando la base de datos estropeada vuelve a un estado operacional, Versant automáticamente resincroniza las dos bases de datos. Sin embargo, hay algunas limitaciones en la replicación síncrona. Cada base de datos solo puede tener una única réplica. Las preguntas en curso y las notificaciones de eventossolo trabajan en una única base de datos y por tanto, no se transfieren a la base de datos que está en espera. No se pueden crear ni deshacer puntos de guardado o usar transacciones anidadas cuando se usa la replicación síncrona. Los cambios de esquema tienen que ser realizados cuando ambas bases de datos estén disponibles. Sin embargo, a pesar de estas limitaciones, la replicación síncrona es un mecanismo excelente para mantener una base de datos correcta. Alternativamente se puede implementar replicación asíncrona usando los mecanismos de notificación de eventos de Versant
Versant usa índices para filtrar objetos de manera que las rutinas de las preguntas solo traen los objetos de interés del disco. Crear y actualizar rutinas también usa los índices para obligar a que haya restricciones únicas en los atributos de los objetos. Un índice se define en un único atributo de un objeto e indexa el atributo específico de todos los objetos de esa clase. Se pueden tener índices de árboles-B o hash. donde los índices de árboles-B son buenos para preguntas de rangos y suficientes para preguntas a campos clave y los índices hash son buenos para preguntas sobre campos clave. Sin embargo, hay varias restricciones y peculiaridades sobre índices que los hacen muy diferentes de los relacionales. Los índices no tienen nombres. Un índice solo se aplica a un único atributo. Un atributo solo puede tener dos índices: un B-tree y un hash. Un índice solo se aplica a una clase específica y no es heredable, por lo que hay que definir los índices correspondientes para todas las subclases. Algunos atribujos complejos como arrays fijos o estructuras de longitud fija no pueden ser indexados.
Para optimizar los accesos a disco Versant provee facilidades para usar métodos de clustering. Este método agrupa los objetos que van a ser llamados juntos más frecuentemente en posiciones consecutivas de disco optimizando los accesos secuenciales.
Versant tiene varias facilidades para manejo de memoria que pueden ser usados por los ABDs y desarrolladores para ajustar el rendimiento. Por ejemplo, se pueden configurar sus cachés, y los objetos pueden ser sujetados a sus propias cachés. Igualmente, se puede configurar los logs, y los objetos pueden estar localizados en varios discos, incluso en dispositivos raw, para mejorar el rendimiento. Esto puede ser bien comparado con las facilidades dadas por el SGBD relacional más ajustable.
Versant permite guardar los resultados de operaciones frecuentes en una caché de usuario, para optimizar los accesos a esos resultados siempre y cuando no se hayan modificado los objetos a los que hacen referencia esas operaciones frecuentes.
El mecanismo de notificación de eventos te permite seguir los objetos y clases y recibir una notificación cuando el objeto especificado se modifica o se borra. Asimismo te permite recibir un mensaje si se crea, modifica o borra una instancia o una clase. Versant usa esto en vez de los triggers, pudiendo configurarse y dependiendo ahora del nivel de aplicación. El número de eventos que se pueden configurar vendrá delimitado por el tamaño de la memoria compartida.
Versant proporciona gran cantidad de herramientas para crear estadísticas sobre la utilización de la base de datos. Luego estas estadísticas pueden ser debidamente utilizadas para optimizar los diferentes accesos.
Debido a la variedad de juegos de caracteres existentes, Versant ofrece la posibilidad de definir cuales utilizar, estando entre ellos el UTF-8, muy utilizado en la actualidad por permitir caracteres de diferentes alfabetos.
Versant utiliza un lenguaje de consultas muy similar al OQL diseñado para consultas contra una base de datos orientada a objetos. Es asimismo muy similar a SQL (SELECT, UPDATE, DELETE,...)
Debido a que ha sido creado de manera que se utilice por aplicaciones externas, Versant proporciona interfaces con los lenguajes de programación más utilizados, como son C, C++ y Java. Anteriormente también tenía interfaz con Smalltalk.
Por la necesidad actual de almacenamiento de datos multimedia, Versant da la opción a utilizar un módulo para poder usar datos de audio, video, imágenes, etc. VMA utiliza Verity Search para crear índices automáticamente para este tipo de datos.
Para ahondar más en la base de datos Versant se recomiendan los siguientes materiales:
Escribe un comentario o lo que quieras sobre Versant (directo, no tienes que registrarte)
Comentarios
(de más nuevos a más antiguos)