5. Bases de datos distribuidas 5.1 Introducción Un sistema de bases de datos distribuidas se compone de un conjunto de sitios conectados entre sí mediante algún tipo de red de comunicaciones en el cual: 1. Cada sitio es un sistema de B.D. por sí mismo. 2. Los sitios han convenido en trabajar juntos con el fin de que un usuario de cualquier sitio pueda obtener acceso a los datos de cualquier punto de la red tal como si todos los datos estuvieran almacenados en el sitio propio del usuario. 5.2 Definición Base de Datos Distribuida DDBMS (Distributed DBMS). Es el software que administra todas las bases de datos de los sitios y proporciona un mecanismo de acceso que hace transparente esta distribución a los usuarios. Esta regla conduce a 12 objetivos o reglas secundarias: 1. Autonomia local. 2. No dependencia de ningun sitio central. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Operación continua. Independencia con respectos a la localización (transparencia de localización). Indepencia con respecto a la fragmentación. Independencia de réplica. Optimización en el procesamiento distribuido de consultas. Manejo de transacciones distribuídas Independencia con respecto al equipo. Independencia con respecto al sistema operativo. Independencia con respecto a la red. Independencia con respecto al DBMS. Ventajas de los DDBMS Autonomia local. Mejora la confiabilidad / disponibilidad. Mejora de la eficiciencia. Expandibilidad. Economía en cuanto crecimiento incremental. Compartición de recursos. Areas problemas de los DDBMS Diseño de base de datos distribuídas. Procesamiento de querys distribuídos. Administración del diccionario de datos. Control de concurrencia distribuído. Administración del deadlock distribuído. Recuperación de transacciones en ambientes distribuídos. Base de datos heterogeneas (Multibase de datos). Relación cruzada entre los problemas anteriores. 5.3 Fragmentación 5.3.1 Definición Fragmentación es la descomposición o partición de una tabla en pedazos llamados fragmentos. La fragmentación básicamente se puede hacer de dos formas: Fragmentación Horizontal. selecciona registros completos de una relación Fragmentación Vertical. selecciona columnas completas de una relación 5.3.2 Reglas a Cumplir por Fragmentación Condición de Completés. Todos los datos de la relación global deberán ser mapeados a algún fragmento. Condición de Reconstrucción. Deberá ser siempre posible reconstruir la relación global a partir de sus fragmentos. Condición de Conjuntos Disjuntos. Es conveniente que los fragmentos sean disjuntos. 5.3.3 Fragmentación Horizontal Definir fragmentos horizontales se hace a través del operador de selección del algebra relacional operando sobre una relación global. Los predicados que nos permiten definir una fragmentación de una relación son llamados la calificación de la fragmentación. En el ejemplo la calificación de la fragmetación hecha a S, son: q1 : CD = ‘L’ q2 : CD = ‘P’ En general una fragmentación horizontal es correcta, si cumple que: El conjunto de calificaciones mapea todo el dominio del atributo(s) bajo el cual se hace la calificación. Si siempre es posible reconstruir la tabla global por medio del operador UNION del algebra relaciónal: R = F1 UNION F2 UNION …UNION Fn Si todas las calificaciones de los fragmentos son mutuamente exclusivas, es decir, si al aplicar las calificaciones se producen fragmentos que al intersectarlos generan un conjunto vacio. F = F1 INTERSECT F2 INTERSECT .. INTESECT Fn 5.3.4 Fragmentación Horizontal Derivada Este tipo de fragmentación particiona una tabla en base a un atributo(s) que esta presente en otra tabla(s). Los fragmentos se definirían de la sig. manera: 5.3.5 Fragmentación Vertical Definir fragmentos verticales se hace a través del operador de proyección del algebra relacional operando sobre una relación global. Una característica importante de la fragmentación vertical, es que todos los fragmentos deben incluir la llave primaria de la relación global. La razón es que si no incluímos la llave primaria no es posible reconstruir la relación original. Para reconstruir la relación original debemos realizar un JOIN de todos los fragmentos. R = F1 JOIN F2 JOIN … JOIN F3 En fragmentación vertical no se cumple que los fragmentos sean disjuntos (la llave está repetida en todos los fragmentos). 5.3.4 Fragmentación Híbrida Consiste en aplicar las operaciones de fragmentación vistas anteriormente de manera recursiva, satisfaciendo las condiciones de correctés cada vez que se realiza la fragmentación. La reconstrucción puede ser obtenida aplicando las reglas de reconstrucción en orden inverso. De esta forma podemos fragmentar nuestra tabla global en los pedazos que queramos y como queramos. Ejemplo: Considere la relación de empleado (E). Una posible fragmentación híbrida sería: E1 = Ex[Emp#, Nombre, #Jefe,Dept#] Where Dept# <10 E2 = Ex[Emp#, Nombre, #Jefe,Dept#] Where Dept# >=10 And Dept# <=20 E3 = Ex[Emp#, Nombre, #Jefe,Dept#] Where Dept# >20 E4 = E[Emp#, Salario, Impto] 5.4 Transacciones distribuidas 5.4.1 Definición Una transacción distribuida es aquella que involucra algún proceso en distintos sitios de la red. Llamaremos a estos procesos los agentes de la transacción, entonces una transacción distribuida esta compuesta por varios agentes. Para llevar a cabo una transacción distribuida los agentes tienen que comunicarse a través de mensajes en la red y se debe garantizar la atomicidad de la transacción. Requiere: 1. Existe un agente raíz que inicia toda la transacción, así que cuando el usuario requiere la ejecución de una aplicación distribuida el agente raíz es iniciado; el sitio del agente raíz es llamado el sitio origen de la transacción. 2. El agente raíz tiene la responsabilidad de asegurar BEGIN-TRANSACTION, COMMIT O ROLLBACK de toda la transacción distribuida. 5.4.2 Recuperación de transacciones distribuidas Para realizar la recuperación de transacción distribuidas se asume que cada sitio tiene su propio manejador de transacción local (LTM). Cada agente utiliza de manera local las primitivas asociadas a sus transacciones. Podemos llamar a los agentes subtransacciones, lo cual origina distinguir las primitivas BEGIN-TRANSACTION, COMMIT Y ROLLBACK asociado a la transacción distribuida de la primitivas locales utilizada por cada agente en LTM; para poder distinguir una de las otras, a las ultimas les llamaremos: LOCAL-BEGIN, LOCAL-COMMIT Y LOCALROLLBACK. Para propósito del manejador de transacciones distribuidas (DTM), requieren que los LTM se conformen de la siguiente manera: 1. Asegurar la atomicidad de su transacción. 2. Grabar en bitácora por ordenes de la transacción distribuida. Para asegurar que todas las acciones de una transacción distribuida son ejecutadas o no ejecutadas dos condiciones son necesarias: a. En cada sitio todas las acciones son ejecutadas o ninguna es ejecutada. b. Todos los sitios deberán tomar la misma decisión respecto al COMMIT o ROLLBACK de la transición global. 5.4.3 Commit de 2 fases En este protocolo hay un agente que tiene un papel especial, este agente es llamado el coordinador (el cual es el agente raíz) y todo los demás agentes son llamados PARTICIPANTES. El COORDINADOR es el responsable de tomar la decisión de hacer un COMMIT o un ROLLBACK GLOBAL y cada PARTICIPANTE es responsable de grabar a sus bitácoras y bases de datos locales. La idea básica del protocolo en dos fases (2pl, 2 phase locking) es determinar una decisión única para todos los participantes con respecto a hacer un COMMIT o un ROLLBACK en todas las subtransacciones locales. La primera fase de este protocolo tiene como objetivo lograr una decisión común, la meta de la segunda fase es llevar a cabo esta decisión. En términos generales el commit de 2 fases en bases de datos distribuidas funciona muy similar a commit de 2 fases tradicional. "En toda transacción, todos los locks preceden a todos los unlocks".