ALGORITMOS DE CONTROL DE CONCURRENCIA EN BASES DE DATOS DISTRIBUIDAS CARRANZA ATHÓ FREDY BASES DE DATOS II ESCUELA ACADÉMICO PROFESIONAL DE INFORMÁTICA UNIVERSIDAD NACIONAL DE TRUJILLO Trujillo Perú 2006 Resumen. El presente artículo tiene como finalidad presentar una descripción de dos algoritmos muy reconocidos para el Control de Concurrencia en el ámbito de las bases de Datos Distribuidas, como son el algoritmo de Dos Fases Distribuidos y el de Estampas de Tiempo. Dichos algoritmos cuentan con particularidades diferentes siendo el primero el bloqueo y el estado de los mismos en dos fases, y del segundo, la sincronización de las operaciones en base a marcas de tiempo. Dichos algoritmos son usados comercialmente, y son los más conocidos en el ámbito de las Bases de Datos, de manera que su conocimiento es base para un buen estudio.
1. INTRODUCCIÓN Con el mayo avance de las redes y los procesos distribuidos, las Ciencias de la Computación y en especial el área de las Bases de Datos, tienen como menester incluir en ellas, propósito de mejora y cambio. Bien conocido por todos es, que las Bases de datos son un punto importante en cualquier estructura que se base en redes, pero la resolución de este problema no es tarea fácil, considerando que las operaciones en una red son constantes y los usuarios exigen rapidez y eficiencia. Así pues, una de las mayores preocupaciones es resolver el caso de la concurrencia. Esta concurrencia, mucha o poca, viene a ser un problema a resolver, es por eso que se presentan algoritmos que permiten ayudar en estos campos. El presente documento presentará dos de los más importantes algoritmo de Control de Concurrencia, ellos son el conocido Algoritmo de Bloqueo de Dos Fases(2PL) y el de Estampas de Tiempo(TS). Estos algoritmos diferentes en su estructura, pretenden resolver cualquier dificultad en la ejecución de las múltiples ejecuciones de las operaciones en un entorno de Bases de Datos Distribuidas. El 2PL básicamente nos enfocará en un ámbito de bloqueos y desbloqueos que para algunos resulta tedioso, pero que ciertamente es el más usado comercialmente, y el TS nos permitirá evitar estos bloqueos, pero con el coste de necesitar mayores comparaciones y espacio auxiliar. Los algoritmos presentados, resolverás los problemas en el Control de Concurrencia, pero eso no equivale a decir que son los únicos, sino que simplemente son los más comerciales y conocidos. Dichos algoritmos no solo mejorarán nuestro entendimiento en el estudio de las Bases de Datos Distribuidas sino que permitirán obtener un mejor concepto del cómo y porqué se debe controlar la concurrencia. 2. ALGORITMO DE DOS FASES DISTRIBUIDO 2.1. DESCRIPCIÓN GENERAL
1
Existe un Lock Manager en cada sitio. Cada uno es responsable de la gestión de bloqueos de los datos que hay en ese nodo, además de ello implementa el protocolo de control de concurrencia ROWA (Read One Write All), lo que significa que se puede utilizar cualquier copia de un dato para ser leído, pero para escribir se deben ser bloqueadas todas las copias. [Según 1] En los candados de dos fases distribuidos se presentan despachadores en cada nodo del sistema. Cada despachador maneja las solicitudes de candados para los datos en ese nodo. Una transacción puede leer cualquiera de las copias replicada del elemento x, obteniendo un candado de lectura en cualquiera de las copias de x. La escritura sobre x requiere que se obtengan candados para todas las copias de x. La comunicación entre los nodos que cooperan para ejecutar una transacción de acuerdo al protocolo de candados distribuidos de dos fases se presenta en la Figura 2.1.1. Los mensajes de solicitud de candados se envían a todos los administradores de candados que participan en el sistema. Las operaciones son pasadas a los procesadores de datos por los administradores de candados. Los procesadores de datos envía su mensaje de "fin de operación" al administrador de transacciones coordinador.[Según 2]
Figura 2.1.1. Comunicación de bloqueos en el 2PL distribuido Se distribuye un gestor de bloqueo en cada nodo. Cada uno es responsable de la gestión de bloqueos de los datos que contiene en ese nodo. El 2PL distribuido implementa una protocolo de control de replicas Read-One-Write-All. Cualquier copia de un dato replicado puede ser usada para operaciones de lectura, pero todas las copias deben ser bloqueadas para escritura antes que se puedan modificar. [Según 3] En el 2PL distribuido, cada transacción puede consistir de varias subtransacciones corriendo en sitios diferentes. Aquí se considera lo siguiente que una planificación es serializable si es equivalente en su efecto sobre la base de datos a una planificación serial. Además de ello el Bloqueo de dos fases exige que los bloqueos se dividan en dos fases: fase de bloqueo (crecimiento) y fase de desbloqueo (decrecimiento). [Según 4] 2.2. CARACTERÍSTICAS A continuación se presenta las características que describen la actuación del algoritmo. Vale aclarar que dada la múltiple bibliografía, las siguientes aseveraciones podrían variar en cuanto a ciertas estructuras usadas para realizar el algoritmo, pero ello no significa que los algoritmos sean diferentes, sino que se presenta una perspectiva distinta siempre con el mismo modelo a seguir. En el algoritmo de detección de bloqueos totalmente distribuido, todos los controladores comparten equitativamente la responsabilidad de detectar los bloqueos. En este esquema, cada una de las localidades construye un grafo de espera local que representa una parte del grafo total, dependiendo del comportamiento dinámico del sistema. La idea es que, si existe un bloqueo, aparezca un ciclo en (por lo menos) uno de los grafos parciales. A continuación se presenta un algoritmo de este tipo, en el cual requiere de la construcción de grafos parciales en todas las localidades. Cada una de las localidades mantiene su grafo de espera local. Estos grafos locales difieren de los antes mencionados en que se agrega un nodo adicional, Tex al grafo. Existirá un arco Ti Tex en el grafo si 2
Ti está esperando un dato de otra localidad que esté siendo ocupado por cualquier otra transacción. De manera similar, existirá un arco Tex Ti en el grafo si existe una transacción en otra localidad que esté esperando un recurso que Ti esté esperando en ésta. En el caso en que un grafo de espera local contiene un ciclo en el que no participa el nodo Tex , entonces el sistema se encontrará en un estado de bloqueo. Sin embargo, la existencia de un ciclo que incluya a Tex , implica la posibilidad de que se haya presentado un bloqueo. Para verificar si es así, es necesario invocar un algoritmo distribuido de detección de bloqueos. Suponemos que el grafo de espera de la localidad Li contiene un ciclo en el que participa el nodo Tex .Este ciclo debe tener la forma: Tex
Tk1
Tk2
…
Tm
Tex
lo que indica que la transacción Tk de Li está en espera para poder ocupar un dato de localidad, por ejemplo Lj . Al descubrir este ciclo, la localidad Li mandará un mensaje de detección de bloqueos a la localidad Lj, el cual contendrá información referente al ciclo.
T1
T2
T5
T3
Tex
T2
alguna otra
T4
Tex T3
Localidad L1
Localidad L2 Figura 2.2.1. Grafo de espera local
Cuando una localidad Lj recibe un mensaje de ese tipo, actualiza su grafo de espera local con la información que acaba de obtener. Una vez hecho eso, determina si en el grafo de espera nuevo existe un ciclo en el que no participe Tex. En caso afirmativo, se habrá detectado un bloqueo y se invocará un esquema de recuperación apropiado. Si se descubre un ciclo en el que participe Tex, Lj transmitirá un mensaje de detección de paralizaciones a la localidad correspondiente, por ejemplo Lk. La localidad Lk, a su vez, repetirá el procedimiento. Así, después de un número finito de repeticiones, bien se habrá detectado un boqueo, o se suspenderá el algoritmo de detección. Para ilustrar lo anterior, examinamos los grafos de espera locales de la Figura 2.2.1. Suponemos que la localidad L1 descubre el ciclo: Tex
T2
T3
Tex
Puesto que T3 está esperando un dato de la localidad L2, la localidad L1 transmitirá un mensaje de detección de paralizaciones que describa este ciclo a la localidad L2. En el momento en que L2 reciba este mensaje, actualizará su grafo de espera local para producir el grafo de espera de la Figura 2.2.2. Este grafo contiene el ciclo: T2
T3
T4
T2
3
que no incluye al nodo Tex. Por tanto, el sistema está en estado de bloqueo y es conveniente invocar un esquema de recuperación apropiado.
Tex
T2
T4
Localidad L2
T3
Figura 2.2.2. Grafo de espera local Es conveniente apuntar que el resultado habría sido el mismo si la localidad L2 y hubiera descubierto primero el ciclo en su grafo de espera local y hubiera enviado el mensaje de detección de bloqueos a la localidad L1. En el peor de los casos, las dos localidades descubrirían el ciclo aproximadamente al mismo tiempo, con lo que se mandaría dos mensajes de detección de bloqueos, uno de L1 a L2 y otro de L2 a L1. Esto conduce a una transferencia innecesaria de mensajes y un cierto retraso mientras se actualizan los dos grafos de espera locales y se buscan ciclos en ambos grafos. Para reducir el tráfico de mensajes, se asigna a cada transacción Ti un identificador único, denotado por ID(Ti). En el caso en el que la localidad Lk descubra que su grafo de espera local contiene un ciclo en que participa el nodo Tex y que tiene la forma Tex Tk1 Tk2 … Tkn Tex sólo enviará un mensaje de detección de bloqueos a otra localidad si: ID(Tkn)< ID(Tk1) De no ser así, Lk continuará con su ejecución normal y dejará la responsabilidad de iniciar el algoritmo de detección de bloqueos a alguna otra localidad. Consideremos de nuevo los grafos de espera de la Figura 2.2.1 que mantienen las localidades L1 y L2. Suponemos que: ID(T1)< ID(T2)
T2
T3
Tex
Puesto que ID(T3)>ID(T2), la localidad L1 no enviará un mensaje de detección de bloqueos a la localidad L2. El ciclo en la localidad L2 tiene forma: Tex
T3
T4
T2
Tex
4
Puesto que ID(T2)
Figura 2.2.3. Planeamiento 1 para las transacciones 1 y 2 Como se observa en la Figura 2.2.3. los elementos que aparecen en una misma línea podrían ocurrir simultáneamente, o en cierto orden. Primero según el sitio S1, T1.1 debe preceder a T2.1 (T1 antes que T2). Y por el otro lado, según el sitio S2, T2.2 debe preceder a T1.2 (T2 antes que T1). Por lo tanto, esta planificación no es serializable. El problema de las transacciones distribuidas es que no sólo debemos controlar que se realicen localmente los bloqueos en dos fases, sino en la transacción global. Por lo tanto, ninguna subtransacción Ti.n de una transacción Ti puede liberar un bloqueo si otra subtransacción Tj.m (de Tj) realizará después un bloqueo (read-lock o write-lock). Ejemplo, En la planificación 1 la transacción T1 viola este principio pues T1.1 libera el bloqueo sobre A1 antes que T1.2 bloquee a A2. En el bloqueo de dos fases estricto cada subtransacción debe informar a las otras subtransacciones de que ha requerido todos los bloqueos. Luego de que todas las transacciones completaron su fase 1 (de bloqueo) pueden continuar con las lecturas y escrituras para luego liberar los bloqueos (unlock). [Según 4] 3. ALGORITMO DE ESTAMPAS DE TIEMPO DISTRIBUIDO 3.1. DESCRIPCIÓN GENERAL En un sistema distribuido, cada transacción debe tener una estampilla de tiempo única para usar en la decisión del orden de serializabilidad. Para la generación de estampillas únicas, en el modelo
1
La referencia a la bibliografía comprende desde el inicio del apartado 2.2. hasta la misma nota de referencia 5
Thank you for evaluating Wondershare PDF Converter.
You can only convert 5 pages with the trial version.
To get all the pages converted, you need to purchase the software from:
http://cbs.wondershare.com/go.php?pid=755&m=db