Una base de datos distribuida (BDD) es un conjunto de múltiples bases de datos lógicamente relacionadas las cuales se encuentran distribuidas en diferentes espacios lógicos y geográficos (pej. un servidor corriendo 2 máquinas virtuales) e interconectados por una red de comunicaciones. Dichas BDD tienen la capacidad de realizar procesamientos autónomos, estos permiten realizar operaciones locales o distribuidas.
Un Sistema de Bases de Datos Distribuida (SBDD), en inglés Distributed Database Management System (DDBMS), es un sistema en el cual múltiples sitios de bases de datos están ligados entre sí por un sistema de comunicaciones de tal forma que, un usuario en cualquier sitio puede acceder los datos en cualquier parte de la red exactamente como si estos fueran accedidos de forma local.
Un sistema distribuido de bases de datos se almacena en varias computadoras. Los principales factores que distinguen un SBDD de un sistema centralizado son los siguientes:
Hay múltiples computadores, llamados sitios o nodos. Estos nodos deben de estar comunicados por medio de algún tipo de red de comunicaciones para transmitir datos y órdenes entre los sitios.
Historia La necesidad de almacenar datos de forma masiva dio paso a la creación de los sistemas de bases de datos. En 1970 Edgar Frank Codd escribió un artículo con nombre: «A Relational Model of Data for Large Shared Data Banks» («Un modelo relacional para grandes bancos de datos compartidos»). Con este artículo y otras publicaciones, definió el modelo de bases de datos relacionales y reglas para poder evaluar un administrador de bases de datos relacionales.
Inicio de las bases de datos distribuidas
Originalmente se almacenaba la información de manera centralizada, pero con el paso del tiempo las necesidades aumentaron y esto produjo ciertos inconvenientes que no era posible solucionarlos o volverlos eficientes de la forma centralizada. Estos problemas impulsaron la creación de almacenamiento distribuido, los cuales hoy en día proveen características indispensables en el manejo de información; es decir, la combinación de las redes de comunicación y las bases de datos.
Evolución
Hay varios factores que han hecho que las bases de datos evolucionen a bases de datos distribuidas. En el mundo de los negocios se ha dado una globalización y a la vez las operaciones de las empresas son cada vez más descentralizadas geográficamente. También el poder de las computadoras personales aumentó y el costo de los Mainframes ya no tenía sentido. Además la necesidad de compartir datos ha hecho que crezca el mercado de las bases de datos distribuidas.
Componentes Hardware involucrado El hardware utilizado no difiere mucho del hardware utilizado en un servidor normal. Al principio se creía que si los componentes de una base de datos eran especializados serían más eficientes y rápidos, pero se comprobó que el descentralizar todo y adoptar un enfoque "nada compartido" (shared-nothing) resultaba más barato y eficaz. Por lo que el hardware que compone una base de datos distribuida se reduce a servidores y la red.
Software
Sistema de Bases de Datos Distribuidas (SBDD)
Este sistema está formado por las transacciones y los administradores de la base de datos distribuidos. Un SBDD implica un conjunto de programas que operan en diversas computadoras, estos podría consistir de una colección de programas de diferentes fuentes.
Administrador de transacciones distribuidas (DTM)
Este es un programa que recibe las solicitudes de procesamiento de los programas de consulta o transacciones y las traduce en acciones para los administradores de la base de datos. Los DTM se encargan de coordinar y controlar estas acciones. Este DTM puede ser propietario o libre.
Sistema manipulador de base de datos (DBMS)
Es un programa que procesa cierta porción de la base de datos distribuida. Se encarga de recuperar y actualizar datos del usuario y generales de acuerdo con los comandos recibidos de los DTM.
Nodo
Un nodo es una computadora que ejecuta un DTM o un DBM o ambos. Un nodo de transacción ejecuta un DTM y un nodo de base de datos ejecuta un DBM.
Consideraciones importantes Planificador distribuido El planificador está encargado de ordenar un conjunto de transacciones u operaciones que se deseen realizar sobre una base de datos. Cualquier orden en el que se decidan hacer este conjunto de operaciones se denomina planificación. Parte del trabajo del planificador es realizar estas operaciones de forma que sean serializables y recuperables.
Dos planificadores son serializables (o equivalentes) si Cada operación de lectura lee valores de los datos que son producidos por la misma operación de escritura en ambas planificaciones (es decir son iguales) La operación final de escritura en cada elemento de la data es la misma en ambas planificaciones
Detección de bloqueos y concurrencia Bloqueos Un bloqueo en general es cuando una acción que debe ser realizada está esperando a un evento. Para manejar los bloqueos hay distintos acercamientos: prevención, detección, y recuperación. También es necesario considerar factores como que hay sistemas en los que permitir un bloqueo es inaceptable y catastrófico, y sistemas en los que la detección del bloqueo es demasiado costosa. En el caso específico de las bases de datos distribuidas usar bloqueo de recursos, peticiones para probar, establecer o liberar bloqueos requiere mensajes entre los manejadores de transacciones y el calendarizador. Para esto existen dos formas básicas: Autónoma: cada nodo es responsable por sus propios bloqueos de recursos. Una transacción sobre un elemento con n réplicas requiere 5n mensajes Petición del recurso Aprobación de la petición Mensaje de la transacción Reconocimientos de transacción exitosa Peticiones de liberación de recursos Copia Primaria: un nodo primario es responsable para todos los bloqueos de recursos Una transacción sobre un elemento con n copias requiere 2n+3 mensajes Una petición del recurso Una aprobación de la peticiónConceptos de Bases de Datos Distribuidas n mensajes de la transacción n reconocimientos de transacción exitosa Una petición de liberación de recurso
Podemos definir que dos operaciones entran en conflicto que debe ser resuelto si ambas acceden a los mismos datos, y una de ellas es de escritura y si fueron realizadas por transacciones distintas.
Concurrencia
El ejemplo más común de un bloqueo mutuo es cuando un recurso A está siendo utilizado por una transacción A que a su vez solicita un recurso B que está siendo utilizado por una transacción B que solicita el recurso A.
Control de concurrencia
El problema de las actualizaciones perdidas: cuando dos transacciones concurrentes borran el efecto una de la otra Recuperaciones inconsistentes: acceder a información modificada parcialmente por una transacción de Ian. Soluciones
El control de concurrencia, detección y manejo de bloqueos es un área de mucho estudio en las bases de datos distribuidas, a pesar de esto no hay ningún algoritmo aceptado para solucionar el problema. Esto se debe a varios factores de los cuales se consideran a los siguientes tres los más determinantes:
El dato puede estar duplicada en un BDD, por tanto, el administrador de la BDD es responsable de localizar y actualizar la data duplicada. Si un nodo falla o la comunicación con un nodo falla mientras se realiza una actualización, el manejador debe asegurarse de que los efectos se reflejen una vez el nodo se recupere del fallo. La sincronización de transacciones en sitios o nodos múltiples es difícil ya que los nodos no pueden obtener información inmediata de las acciones realizadas en otros nodos concurrentemente.
Para el control de bloqueos mutuos no se ha desarrollado ninguna solución viable y la forma más simple y que la mayoría de productos utilizan es la implementación de un tiempo máximo de espera en las peticiones de bloqueos.
Causa de estas dificultades más de 20 algoritmos de control de concurrencia se han propuesto en el pasado, y aun así siguen apareciendo nuevos. Una revisión bibliográfica muestra que la mayoría de los algoritmos son variantes del 2PL (2-phase locking o bloqueo de dos fases) o el algoritmo de time-stamp. A continuación se explican estos dos algoritmos básicos.
Bloqueo de dos fases (2PL)
El algoritmo 2PL utiliza bloqueos de lectura y escritura para prevenir conflictos entre operaciones. Consiste en los siguientes pasos para una transacción T:
Obtiene bloqueo de lectura para un elemento L (bloqueo compartido) Obtiene bloqueo de escritura para un elemento E (bloqueo exclusivo) Lee el elemento L Escribe en el elemento E Libera el bloqueo de L Libera el bloqueo de E
Las reglas básicas para manejar los bloqueos son: transacciones distintas no pueden tener acceso simultáneamente a un elemento (lectura-escritura o escritura-escritura), y una vez se libere un bloqueo no se puede pedir otro, es decir, los bloqueos de la transacción crecerán mientras no libere ninguno y luego de liberar alguno solo puede liberar los demás.
Ejemplos del algoritmo 2PL son
La básica en la que se sigue el esquema previamente explicado con la variante que el bloqueo de escritura se pide para todas las copias del elemento. 2PL de copia primaria: en vez de pedir bloqueo para cada copia del elemento de escritura se le pide a una copia primaria o principal. 2PL de voto: se pide a todos los nodos que voten para ver si se concede el bloqueo. 2PL centralizado: el manejador de bloqueos está centralizado y todas las peticiones de bloqueo las maneja el.
Antes de implementar un algoritmo de control de concurrencia 2PL es necesario considerar distintos factores como cual es la unidad atómica más pequeña que el sistema permite bloquear, cual es el intervalo de sincronización para todas las copias de un elemento, donde se deben colocar las tablas con la información de los bloqueos y por último que tan probable es que ocurra por los factores anteriores un bloqueo mutuo.
Time-stamp
Cada transacción realizada se le asigna un timestamp (literalmente: sello de tiempo) único en el nodo que se originó. Este sello se adjunta a cada petición de lectura y escritura. En el caso de que se dé un conflicto de que dos operaciones de escritura traten de acceder al mismo elemento, este se resuelve serializándolo respecto a los sellos que tengan. A pesar de que existen varios algoritmos de control de concurrencia basados en timestamps, muy pocos son utilizados en aplicaciones comerciales. Esto es en gran parte porque se requiere que el sistema distribuido cuente con un reloj sincronizado que es raro que se tenga implementado.
Manejador de transacciones distribuido (DTM) Definición de transacciones Una transacción es una secuencia de una o más operaciones agrupadas como una unidad. El inicio y el final de la transacción definen los puntos de consistencia de la base de datos. Si una acción de la transacción no se puede ejecutar, entonces ninguna acción dentro de la secuencia que conforma la transacción tendrá efecto.
Propiedades de las transacciones Atomicidad: Una transacción es una unidad atómica de procesamiento, esta se realiza o no se realiza. Consistencia: Si se ejecuta una transacción sobre un estado consistente, el resultado será un nuevo estado consistente. Aislamiento: Una transacción no hará visibles sus modificaciones a otras transacciones hasta que termine de ejecutarse completamente. Es decir, una transacción desconoce si otras transacciones se estén ejecutando en el sistema. Durabilidad: Una vez una transacción se ejecuta exitosamente y realiza cambios sobre el sistema, estos cambios nunca se deben perder a causa de fallas en el sistema.
Tipos de transacciones
Una transacción puede clasificarse de diferentes maneras dependiendo básicamente de tres criterios: