Base de Datos Distribuidas viernes, 23 de julio de 2021 Base de Datos Distribuidas 1 UNIDAD 3: PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS viernes, 23 de julio de 2021 Base de Datos Distribuidas 2 3.1 Metodología del procesamiento de consultas distribuidas Las consultas distribuidas obtienen acceso a datos de varios orígenes de datos heterogéneos. Estos orígenes de datos pueden estar almacenados en el mismo equipo o en equipos diferentes. Microsoft SQL Serveradmite consultas distribuidas utilizando OLE DB. Los usuarios de SQL Server pueden utilizar consultas distribuidas para obtener acceso a lo siguiente: ✓ Datos distribuidos almacenados en varias instancias de SQL Server. ✓ Datos heterogéneos almacenados en varios orígenes de datos relacionales y no relacionales a los que se obtiene acceso mediante un proveedor OLE (Object Linking and Embedding (Incrustación y Vinculación de Objetos) DB. viernes, 23 de julio de 2021 Base de Datos Distribuidas 3 3.1 Metodología del procesamiento de consultas distribuidas viernes, 23 de julio de 2021 Base de Datos Distribuidas 4 3.1 Metodología del procesamiento de consultas distribuidas viernes, 23 de julio de 2021 Base de Datos Distribuidas 5 3.1 Metodología del procesamiento de consultas distribuidas Operaciones Aritméticas en Consultas • Dentro de un SELECT podemos mostrar resultados que provienen de uno o varios campos de la base de datos utilizando operaciones matemáticas. • Las operaciones básicas son suma (+), resta (-), división (/) y multiplicación (*). • A continuación vamos a mostrar algunos ejemplos: Operaciones Aritméticas – Mult. • Mostrar el nombre y el salario anual de los empleados. (asuma que el atributo salario sólo tiene el pago mensual) • SELECT emp_nombre, emp_salario * 12 • FROM empleado; viernes, 23 de julio de 2021 Base de Datos Distribuidas 6 3.1 Metodología del procesamiento de consultas distribuidas Operaciones Aritméticas - SumaOperaciones Aritméticas – Suma • ¿A cuánto subiría el salario de cada empleado si le incluimos 300 dólares de aumento? Mostrar el nombre y el salario incluyéndole el aumento de 300 dólares. • SELECT emp_nombre, emp_salario + 300 • FROM empleado; Operaciones Aritméticas – Varios • Mostrar el nombre y lo que gana el empleado en comisión para aquellos que son vendedores. • SELECT emp_nombre, emp_commision * emp_salario / 100 • FROM empleado • WHERE emp_titulo = ‘Vendedores’; viernes, 23 de julio de 2021 Base de Datos Distribuidas 7 3.1 Metodología del procesamiento de consultas distribuidas Operaciones Alfanuméricas en Consultas • En estas operaciones se juega con el manejo de caracteres y “string”. • Permiten una mejor presentación de los datos en pantalla y/o reportes. • Ayuda en la búsqueda de instancias en la tabla. • A continuación mostramos algunos ejemplos Operaciones Alfanuméricas en Consultas – Ejemplo 1 • Mostrar el nombre y apellido (que no queden separados por espacios en blanco) • SELECT emp_nombre || emp_apellidos • FROM empleado; viernes, 23 de julio de 2021 Base de Datos Distribuidas 8 3.1 Metodología del procesamiento de consultas distribuidas Operaciones Aritméticas con Fechas en Consultas • SQL permite ejecutar queries que incluyan operaciones aritméticas con fechas. • Es útil para manejar días, diferencias entre fechas y calcular estimados de tiempo. A continuación mostramos algunos ejemplos: Operaciones Aritméticas con Fechas en Consultas – Ejemplo 1 • Mostrar el nombre del empleado, la fecha que comenzó y la fecha en que le corresponde evaluarlo en la empresa ( La evaluación se hace después de los primeros 6 meses de comenzar a trabajar) • SELECT emp_nombre, emp_fecha_inicio, ADD_MONTHS(emp_fecha_inicio,6) AS ‘Fecha • Evaluación’ • FROM empleado; viernes, 23 de julio de 2021 Base de Datos Distribuidas 9 3.1 Metodología del procesamiento de consultas distribuidas viernes, 23 de julio de 2021 Base de Datos Distribuidas La función principal de un procesador de consultas relacionales es transformar una consulta en una especificación de alto nivel, típicamente en cálculo relacional, a una consulta equivalente en una especificación de bajo nivel, típicamente alguna variación del álgebra relacional. La consulta de bajo nivel implementa de hecho la estrategia de ejecución para la consulta. La transformación debe ser correcta y eficiente. Es correcta si la consulta de bajo nivel tiene la misma semántica que la consulta original, esto es, si ambas consultas producen el mismo resultado. 10 3.1 Metodología del procesamiento de consultas distribuidas viernes, 23 de julio de 2021 Base de Datos Distribuidas 11 3.1 Metodología del procesamiento de consultas distribuidas Ejemplo: E( ENO, ENOMBRE, TITULO ) G( ENO, JNO, RESPONSABLE, JORNADA ) y la siguiente consulta de usuario: "Encuentre todos los nombres de empleados que manejan un proyecto" La expresión de la consulta en SQL se puede ver como SELECT ENOMBRE FROM E, G WHERE E.ENO = G.ENO AND RESPONSABLE = "ADMINISTRADOR" Dos consultas equivalentes en el álgebra relacional que son transformaciones correctas de la consulta en SQL son: viernes, 23 de julio de 2021 Base de Datos Distribuidas 12 3.1 Metodología del procesamiento de consultas distribuidas Como es intuitivamente obvio, la segunda estrategia que evita calcular el producto cartesiano entre E y G, consume mucho menos recursos que la primera y, por lo tanto, es mejor. En el procesamiento distribuido de consultas se estudia el coste de las comunicaciones. Las consultas distribuidas se realizarán, ante todo, con la operación de semijoin para poder optimizar dichas consultas. En un sistema distribuido hay varios factores adicionales que complican el proceso de consulta en comparación con los sistemas centralizados. El primero de estos factores es el coste de transferencia de datos a través de la red. Los datos son enviados a ficheros intermedios que a su vez se envían a otros nodos para nuevos procesos. Los ficheros resultantes deben enviarse de vuelta al nodo que lanzó la consulta. Los algoritmos de consulta deben, por tanto, tener como objetivo laBase reducción de la cantidad de datos transferidos. viernes, 23 de julio de 2021 de Datos Distribuidas 13 3.1 Metodología del procesamiento de consultas distribuidas Algunos de los problemas más comunes que se presentan en los sistemas de bases de datos distribuidas. En los entornos distribuidos de datos podemos encontrar lo siguientes: • Fallo de los nodos. Cuando un nodo falla, el sistema deberá continuar trabajando con los nodos que aún funcionan. Si el nodo a recuperar es una base de datos local, se deberán separar los datos entre los nodos restantes antes de volver a unir de nuevo el sistema. • Copias múltiples de fragmentos de datos. El subsistema encargado del control de concurrencia es el responsable de mantener la consistencia en todas las copias que se realicen y el subsistema que realiza la recuperación es el responsable de hacer copias consistentes de los datos de los nodos que han fallado y que después se recuperarán. • Transacción distribuida correcta. Se pueden producir fallos durante la ejecución de una transacción correcta si se plantea el caso de que al acceder a alguno de los nodos que intervienen en la transacción, dicho nodo falla. • Fallo de las conexiones de comunicaciones. El sistema debe ser capaz de tratar los posibles fallos que se produzcan en las comunicaciones entre nodos. El caso más extremo es el que se produce cuando se divide la red. Esto puede producir la separación de dos o más particiones donde las particiones de cada nodo pueden comunicarse entre sí pero no con particiones de otros nodos. viernes, 23 de julio de 2021 Base de Datos Distribuidas 14 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS ❑ En el procesamiento distribuido de consultas se estudia el coste de las comunicaciones. Objetivo: la reducción de la cantidad de datos transferidos. ❑ Optimización mediante operación de semijoin. ❑ En un sistema distribuido existen factores que complican el proceso de consulta en comparación con los sistemas centralizados. ✓ Costo de transferencia de datos a través de la red. Ejemplos de consulta distribuida: viernes, 23 de julio de 2021 Base de Datos Distribuidas 15 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS Tamaño de la relación EMPLEADO es 100 * 10.000 = 106 bytes Tamaño de la relación DEPARTAMENTO es 35 * 100 = 3500 bytes. Consideremos la consulta: “Por cada empleado, obtener el nombre del empleado y el nombre del departamento al que pertenece”. La expresión de ésta consulta en álgebra relacional será: El resultado de ésta consulta constará de 10.000 tuplas. Cada tupla resultante será de una longitud de 40 bytes. El tamaño del resultado será por tanto de 400.000 bytes. Supongamos que el resultado viaja al nodo 3, denominado nodo respuesta ya que será el lugar donde se requiera el resultado de dicha consulta. Sin embargo, ni la relación EMPLEADO ni DEPARTAMENTO residen en dicho nodo. Ejemplo de consulta distribuida: Contador: viernes, 23 de julio de 2021 Base de Datos Distribuidas 16 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS viernes, 23 de julio de 2021 Base de Datos Distribuidas 17 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS Estrategias: 1. Transferir la relación EMPLEADO y DEPARTAMENTO al nodo respuesta (nodo 3) y realizar allí la operación de join. En éste caso se transfieren 1.000.000 + 3.500 = 1.003.500 bytes. viernes, 23 de julio de 2021 Base de Datos Distribuidas 18 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS 2. Transferir la relación EMPLEADO al nodo 2, ejecutar el join en este nodo y enviar el resultado al nodo 3. Esto implicaría transferir 1.000.000 bytes de EMPLEADO + 400.000 bytes del resultado, es decir: 1.400.000 bytes. viernes, 23 de julio de 2021 Base de Datos Distribuidas 19 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS 3. Transferir la relación DEPARTAMENTO al nodo 1, ejecutar el join en este nodo y enviar el resultado al nodo 3. En este caso, los bytes transferidos serán: 3.500 de la relación DEPART AMENTO más 400.000 del resultado. Es decir 403.500 bytes. viernes, 23 de julio de 2021 Base de Datos Distribuidas 20 3.2 ESTRATEGIAS DE PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS ❑ Realizar las operaciones de selección lo antes posible ❑ Combinar el producto cartesiano con una operación de selección subsiguiente cuyo predicado represente una condición de combinación, para formar una operación de combinación ❑ Utilizar la asociatividad de las operaciones binarias para reordenar los nodos hoja de modo que los nodos hoja con las operaciones de selección más restrictivas se ejecuten primero ❑ Realizar las operaciones de proyección lo antes posible ❑ Calcular una única vez las expresiones posibles. viernes, 23 de julio de 2021 Base de Datos Distribuidas 21 3.2.1 ÁRBOLES DE CONSULTAS. Árbol: En ciencias de la informática, un árbol es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el árbol y puede tener cero o más nodos hijos conectados a él. Se dice que un nodo a es padre de un nodo b si existe un enlace desde a hasta b (en ese caso, también decimos que b es hijo de a). Sólo puede haber un único nodo sin padres, que llamaremos raíz. Un nodo que no tiene hijos se conoce como hoja. Los demás nodos (tienen padre y uno o varios hijos) se les conoce como rama. Consulta: método para acceder a los datos en la base de datos. Con las consultas se puede modificar, mostrar agregar datos de una BD. ÁRBOL DE LA CONSULTA SQL Es una representación interna de una sentencia SQL donde las partes individuales que la construyó se almacenan por separado. Estos árboles de consulta son visibles cuando se inicia el Postgre SQL y escribir consultas en la interfaz de usuario interactivo. viernes, 23 de julio de 2021 Base de Datos Distribuidas 22 3.2.1 ÁRBOLES DE CONSULTAS. Definición de árbol de consulta Un árbol de consulta es una estructura de árbol que corresponde a una expresión del álgebra relacional, donde las relaciones iniciales son representadas a través de los nodos hojas del árbol y las operaciones son representadas en los nodos internos. Una ejecución de un árbol de consulta consiste en la ejecución de una operación de un nodo interno siempre que sus operadores estén disponibles y luego sustituyendo este nodo por la relación que resulte de ejecutar la operación. La ejecución termina cuando el nodo raíz es ejecutado y produce la relación resultante. El bloque de consulta tiene la siguiente forma: SELECT < lista de atributos > FROM < lista de tablas> WHERE < condición > La lista de atributos, es la lista de nombres de atributos cuyos valores serán recuperados en la consulta. La lista de tablas, es la lista de nombres de las tablas o relaciones necesarias para procesar la consulta. La condición, es la expresión condicional (booleana) que identifica las tuplas que serán recuperadas por la consulta. viernes, 23 de julio de 2021 Base de Datos Distribuidas 23 3.2.1 ÁRBOLES DE CONSULTAS. Ejemplo de árbol de consulta “Listar los nombres de los empleados nacidos antes de 1960 que trabajen en un proyecto llamado Géminis” SELECT enombre FROM Empleado, Trabaja-en, Proyecto WHERE pnombre = “Géminis” AND pnumero = pnum AND Empleado.c.i.=Trabaja-en.c.i. AND fnac < 01/01/1960 viernes, 23 de julio de 2021 Base de Datos Distribuidas 24 3.2.1 ÁRBOLES DE CONSULTAS. viernes, 23 de julio de 2021 Base de Datos Distribuidas 25 3.2.1 ÁRBOLES DE CONSULTAS. Las partes de un árbol de consulta SQL Al leer las representaciones de SQL de los árboles de consulta en este documento es necesario para poder identificar las partes se divide el estado en cuando se encuentra en la estructura del árbol de la consulta. Las partes de un árbol de la consulta son: ❑ El tipo de comando .- Este es un valor simple decir que comando (SELECT, INSERT, UPDATE, DELETE) produjo el árbol de análisis. ❑ La tabla de rango La tabla es una lista amplia de las relaciones que se utilizan en la consulta. En una instrucción SELECT se trata de las relaciones dadas después de la palabra clave FROM. Cada entrada de la tabla gama identifica una tabla o vista y le dice por qué nombre se le llama en otras partes de la consulta. SQL En el árbol de consulta de las entradas de tabla de la gama se hace referencia por el índice en lugar de por su nombre, así que aquí no importa si hay nombres duplicados ya que en una sentencia SQL. viernes, 23 de julio de 2021 Base de Datos Distribuidas 26 3.2.1 ÁRBOLES DE CONSULTAS. ❑ La relación resultado Este es un índice en la tabla de rango que identifica la relación donde van los resultados de la consulta. Las consultas SELECT normalmente no tienen una relación de resultados. En las consultas INSERT, UPDATE y DELETE la relación resultado es la tabla donde los cambios surtan efecto. ❑ La lista de objetivos • La lista de objetivos es una lista de expresiones que definen el resultado de la consulta. En el caso de una SELECT, las expresiones son las que se basa el resultado final de la consulta. • DELETE no necesitan una lista de objetivos, ya que no producen ningún resultado. CTID • En INSERT la lista objetivo describe las nuevas filas que deben entrar en la relación resultado. • En las consultas UPDATE, la lista de objetivos describe las nuevas filas que deben sustituir a los antiguos viernes, 23 de julio de 2021 Base de Datos Distribuidas 27 3.2.1 ÁRBOLES DE CONSULTAS. La calificación La consulta de calificación es una expresión muy similar a uno de los que figuran en la lista de entradas de destino. El valor del resultado de esta expresión es un valor booleano que indica si la operación (INSERT, UPDATE, DELETE o SELECT) para la fila de resultado final debe ser ejecutado o no. SQL Es la cláusula WHERE de una instrucción SQL. viernes, 23 de julio de 2021 Base de Datos Distribuidas 28 3.2.2 TRANSFORMACIONES EQUIVALENTES Cuando una base de datos se encuentra en múltiples servidores y distribuye a un número determinado de nodos tenemos: ❑ El servidor recibe una petición de un nodo. ❑ El servidor es atacado por el acceso concurrente a la base de datos cargada localmente. ❑ El servidor muestra un resultado y le da un hilo a cada una de las maquinas nodo de la red local. Cuando una base de datos es acezada de esta manera la técnica que se utiliza es la de fragmentación de datos que puede ser hibrida, horizontal y vertical. En esta fragmentación lo que no se quiere es perder la consistencia de los datos, por lo tanto se respetan las formas normales de la base de datos. Bueno para realizar una transformación en la consulta primero desfragmentamos siguiendo los estándares marcados por las reglas formales y posteriormente realizamos el envió y la maquina que recibe es la que muestra el resultado pertinente para el usuario, de esta se puede producir una copia que será la equivalente a la original. viernes, 23 de julio de 2021 Base de Datos Distribuidas 29 3.2.3 MÉTODOS DE JOIN La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipos de JOIN: interno, externo, y cruzado. Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una función de composición. Tablas de ejemplo Todas las explicaciones que están a continuación utilizan las siguientes dos tablas para ilustrar el efecto de diferentes clases de uniones JOIN. viernes, 23 de julio de 2021 Base de Datos Distribuidas 30 3.2.3 MÉTODOS DE JOIN La tabla Empleado contiene a los empleados con el número del departamento al que pertenecen; mientras que la tabla Departamento, contiene el nombre de los departamentos de la empresa, se puede notar que existe un empleado que tiene asignado un número de departamento que no se encuentra en la tabla Departamento (Gaspar), igualmente, en la tabla Departamento existe un departamento al cual no pertenece empleado alguno (Mercadeo). Esto servirá para presentar algunos ejemplos más adelante. Combinación interna (INNER JOIN) Con esta operación se calcula el producto cruzado de todos los registros; así cada registro en la tabla A es combinado con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen. Este es el tipo de JOIN más utilizado por lo que es considerado el tipo de combinación predeterminado. Sql especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita usa la palabra JOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaración SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE. viernes, 23 de julio de 2021 Base de Datos Distribuidas 31 3.2.3 MÉTODOS DE JOIN Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL. Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre algunas combinaciones, éstas no se muestran; es decir que si el número de departamento de un empleado no coincide con los números de departamento de la tabla Departamento, no se mostrará el empleado con su respectivo departamento en la tabla resultante. Las dos consultas siguientes son similares, y se realizan de manera explícita (A) e implícita (B). viernes, 23 de julio de 2021 Base de Datos Distribuidas 32 3.2.3 MÉTODOS DE JOIN A. Ejemplo de la sentencia INNER JOIN explícita: SELECT * FROM empleado INNER JOIN departamento ON empleado.IDdepartamento = departamento.IDdepartamento B. Ejemplo de la sentencia INNER JOIN implícita: SELECT * FROM empleado, departamento WHERE empleado.IDdepartamento = departamento.IDDepartamento viernes, 23 de julio de 2021 Base de Datos Distribuidas 33 3.2.3 MÉTODOS DE JOIN Resultados: viernes, 23 de julio de 2021 Base de Datos Distribuidas 34 3.2.3 MÉTODOS DE JOIN El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de éstos tiene registros correspondientes en la otra tabla. No existe un departamento con número 36 ni existe un empleado con número de departamento 35. Combinación externa (OUTER JOIN) Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda. En sql no existe una notación implícita para las combinaciones externas. Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha, o combinación completa. viernes, 23 de julio de 2021 Base de Datos Distribuidas 35 3.2.3 MÉTODOS DE JOIN De tabla izquierda (LEFT OUTER JOIN o LEFT JOIN) El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha, para uno de la izquierda. La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. A diferencia del resultado presentado en los ejemplos A y B (de combinación interna) donde no se mostraba el empleado cuyo departamento no existía; en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se presentará el empleado, cuyo departamento no existe. Ejemplo de tabla izquierda para la combinación externa: SELECT distinct * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento viernes, 23 de julio de 2021 Base de Datos Distribuidas 36 3.2.3 MÉTODOS DE JOIN viernes, 23 de julio de 2021 Base de Datos Distribuidas 37 3.2.3 MÉTODOS DE JOIN De tablederecha (RIGHT OUTER JOIN o RIGHT JOIN) Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para uno de la derecha. La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. Ejemplo de tabla derecha para la combinación externa: SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento viernes, 23 de julio de 2021 Base de Datos Distribuidas 38 3.2.3 MÉTODOS DE JOIN viernes, 23 de julio de 2021 Base de Datos Distribuidas 39 3.2.3 MÉTODOS DE JOIN En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay empleados registrados en dicha área. Combinacióncompleta (FULL OUTER JOIN) Esta operación presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla. La tabla combinada contendrá, entonces, todos los registros de ambas tablas y presentará valores nulos NULLs para registros sin pareja. Ejemplo de combinación externa completa: SELECT * FROM empleado FULL OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento viernes, 23 de julio de 2021 Base de Datos Distribuidas 40 3.2.3 MÉTODOS DE JOIN viernes, 23 de julio de 2021 Base de Datos Distribuidas 41 3.2.3 MÉTODOS DE JOIN Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su área correspondiente, y se muestra además el departamento de Mercadeo con valor nulo en los empleados de esa área. Algunos sistemas de bases de datos no soportan esta funcionalidad, pero esta puede ser emulada a través de las combinaciones de tabla izquierda, tabla derecha y de la sentencia de unión. K. El mismo ejemplo puede expresarse así: SELECT * FROM empleado LEFT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento UNION SELECT * FROM empleado RIGHT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento WHERE empleado.IDDepartamento IS NULL viernes, 23 de julio de 2021 Base de Datos Distribuidas 42 3.2.3 MÉTODOS DE JOIN Cruzada (Cross join) Presenta el producto cartesiano de todos los registros de las dos tablas. El código SQL para realizar este producto cartesiano enuncia las tablas que serán combinadas, pero no incluye algún predicado que filtre el resultado. Ejemplo de combinación cruzada explícita: SELECT * FROM empleado CROSS JOIN departamento Ejemplo de combinación cruzada implícita: SELECT * FROM empleado, departamento; viernes, 23 de julio de 2021 Base de Datos Distribuidas 43 3.2.3 MÉTODOS DE JOIN viernes, 23 de julio de 2021 Esta clase de combinaciones son usadas pocas veces, generalmente se les agregan condiciones de filtrado con la sentencia WHERE para hallar resultados específicos. Base de Datos Distribuidas 44 3.3.- OPTIMIZACIÓN DE CONSULTAS Cada día se necesita procesar mayor cantidad de datos y obtener de manera más rápida y precisa la información. Muchos de los problemas de rendimiento se deben entre otras cosas al hardware, al software, al motor de base de datos y por sobre todo al diseño, índices y mala formulación de consultas SQL. Existe la posibilidad de encontrar algunas Consultas SQL, que al momento de ejecutarse, generen problemas en el SBD, tales como: -Elevada carga del CPU -Bloquean procesos de trabajo durante largo tiempo. -Leen muchos bloques de datos a la memoria intermedia (Paginamiento) - Las Consultas SQL que generan este tipo de problema, se las denomina “COSTOSAS” o “INEFICIENTES”. viernes, 23 de julio de 2021 Base de Datos Distribuidas 45 3.3.- OPTIMIZACIÓN DE CONSULTAS La optimización de consultas es el proceso de la selección del plan de evaluación de las consultas más eficiente entre las muchas estrategias generalmente disponibles para el procesamiento de una consulta dada, especialmente si la consulta es compleja. No se espera que los usuarios escriban las consultas de modo que puedan procesarse de manera eficiente. Por el contrario se espera que el sistema cree un plan de evaluación de las consultas que minimice el coste de la evaluación de las consultas aquí es donde entra la optimización de consultas. El procesamiento de consultas tiene varias etapas a seguir para resolver una consulta SQL. Las características del modelo relacional permiten que cada motor de base de datos elija su propia representación que, comúnmente, resulta ser el álgebra relacional. Una de las etapas es: La optimización de consultas Supone la utilización de una medida de costo que sea común a lo largo del proceso, esta medida debe representar el criterio de minimización en la utilización de recursos del sistema. ). Este enfoque estima un costo que estará determinado por formulas predefinidas y por la información del catalogo inherente a la consulta. Sin embargo el optimizador no siempre escoge el plan más óptimo, ya que una búsqueda exhaustiva de la estrategia óptima puede consumir demasiado tiempo de proceso. El catálogo de la base de datos guarda información estadística de cada una de las relaciones como también de los índices de cada una de la relaciones, estas estadísticas permiten estimar los tamaños de los resultados de varias operaciones. viernes, 23 de julio de 2021 Base de Datos Distribuidas 46 3.3.- OPTIMIZACIÓN DE CONSULTAS Una mala administración de la información que contiene el catálogo conducirá inevitablemente a una desafortunada elección del plan de ejecución. Consiste en la actualización automática de las estadísticas que algunos motores de base de datos incluyen como opción. Otro enfoque es la opción de guardar en el catálogo planes de ejecución precalculados que además le ahorran al motor el tiempo de cálculo del plan. Uno de los primeros optimizadores de consultas y el que se conoce como base para la mayoría de los optimizadores tradicionales es el optimizador de System R. System R es un optimizador basado en costos pero que utiliza heurísticas para desplazar selecciones y proyecciones hacia abajo en el árbol de la consulta. El primer paso de un optimizador de consultas es encontrar una expresión del álgebra de relaciones que sea equivalente a la expresión dada y cuyo costo estimado de ejecución sea menor. La optimización incide: ❑ La optimización El coste de comunicación de acceso a almacenamiento secundario. ❑ El coste de almacenamiento. ❑ El coste de computación. ❑ El optimizador interviene también en las actualizaciones y borrados. viernes, 23 de julio de 2021 Base de Datos Distribuidas 47 3.3.- OPTIMIZACIÓN DE CONSULTAS • PASOS PARA GENERAR UNA OPTIMIZACIÓN: • 1. Generar un Plan de Ejecución • 2. Escribir la consulta • 3. Crear y gestionar índices: los índices se utilizan para agilizar las búsquedas de información. • 4. Aplicación del plan viernes, 23 de julio de 2021 Base de Datos Distribuidas 48 3.3.- OPTIMIZACIÓN DE CONSULTAS TIEMPO DE OPTIMIZACIÓN Una consulta puede ser optimizada en tiempos diferentes con relación a tiempo de ejecución de la consulta. La optimización se puede realizar de manera estática antes de ejecutar la consulta o de forma dinámica durante la ejecución de la consulta. ▪ Optimización estática se hace en tiempo de compilación de la consulta. Así, el costo de la optimización puede ser amortizada sobre múltiples ejecuciones de la misma consulta. ▪ Optimización de consultas dinámica la elección de la mejor operación siguiente se puede hacer basado en el conocimiento exacto de los resultados de las operaciones anteriores. Por tanto, se requiere tener estadísticas acerca del tamaño de los resultados intermedios para aplicar esta estrategia. ▪ Híbrido: utiliza básicamente un enfoque estático, pero se puede aplicar un enfoque dinámico cuando los tamaños de las relaciones estimados están alejados de los tamaños actuales. viernes, 23 de julio de 2021 Base de Datos Distribuidas 49 3.3.- OPTIMIZACIÓN DE CONSULTAS LA OPTIMIZACIÓN DE CONSULTAS se hace de dos maneras: A nivel del Álgebra relacional: es un lenguaje de consulta procedural. Consta de un conjunto de operaciones que toman como entrada una o dos relaciones y producen como resultado una nueva relación; el sistema intenta hallar una expresión que sea equivalente a la expresión dada, pero de ejecución más eficiente. (utilizando el selección, proyección, producto artesiano, unión). Este tipo de OPTIMIZACIÓN es para las consultas globales. Algoritmos de sistemas centralizados: estrategia detallada para el procesamiento de las consultas para ejecutar la operación, la selección de los índices concretos que se van a emplear, etc. Este tipo de OPTIMIZACIÓN es para las consultas locales viernes, 23 de julio de 2021 Base de Datos Distribuidas 50 3.3.1 OPTIMIZACIÓN GLOBAL DE CONSULTAS Optimización se define desde un punto de vista informático, como la búsqueda y el hecho de mejorar el rendimiento de un sistema operativo, programa o dispositivo, a partir de determinados cambios lógicos (software) o físicos (hardware) • Cuando hablamos de optimización de consultas nos referimos a mejorar los tiempos de respuesta en un sistema de gestión de bases de datos relacional, pues la optimización es el proceso de modificar un sistema para mejorar su eficiencia o también el uso de los recursos disponibles. • Dada una consulta algebraica sobre fragmentos, el objetivo de esta capa es hallar una estrategia de ejecución para la consulta cercana a la óptima. La estrategia de ejecución para una consulta distribuida puede ser descrita con los operadores del álgebra relacional y con primitivas de comunicación para transferir datos entre nodos. Para encontrar una buena transformación se consideran las características de los fragmentos, tales como, sus cardinalidades. Un aspecto importante de la optimización de consultas es el ordenamiento de juntas, dado que algunas permutaciones de juntas dentro de la consulta pueden conducir a un mejoramiento de varios órdenes de magnitud. La salida de la capa de optimización global es una consulta algebraica optimizada con operación de comunicación incluida sobre los fragmentos. • • La optimización global se da con respecto a todo el código. • • Este tipo de optimización es más lenta pero mejora el desempeño general de todo programa. • • Las optimizaciones globales pueden depender de la arquitectura de la máquina. viernes, 23 de julio de 2021 Base de Datos Distribuidas 51 3.3.1 OPTIMIZACIÓN GLOBAL DE CONSULTAS viernes, 23 de julio de 2021 Base de Datos Distribuidas 52 3.3.1 OPTIMIZACIÓN GLOBAL DE CONSULTAS Descomposición de consultas La primera capa descompone una consulta en el cálculo relacional en una consulta en el álgebra relacional que opera sobre relaciones globales. Consiste de cuatro partes: 1. Normalización. Involucra la manipulación de los cuantificadores de la consulta y de los calificadores de la misma mediante la aplicación de la prioridad de los operadores lógicos. 2. Análisis. Se detecta y rechazan consultas semánticamente incorrectas. 3. Simplificación. Elimina predicados redundantes. 4. Reestructuración. Mediante reglas de transformación una consulta en el cálculo relacional se transforma a una en el álgebra relacional. Se sabe que puede existir más de una transformación. Por tanto, el enfoque seguido usualmente es empezar con una consulta algebraica y aplicar transformaciones para mejorarla. Localización de Datos La entrada a esta capa es una consulta algebraica definida sobre relaciones distribuidas. El objetivo de esta capa es localizar los datos de la consulta usando la información sobre la distribución de datos. Esta capa determina cuales fragmentos están involucrados en la consulta y transforma la consulta distribuida en una consulta sobre fragmentos. viernes, 23 de julio de 2021 Base de Datos Distribuidas 53 3.3.1 OPTIMIZACIÓN GLOBAL DE CONSULTAS Optimización Global de Consultas Dada una consulta algebraica sobre fragmentos, el objetivo de esta capa es hallar una estrategia de ejecución para la consulta cercana a la óptima. La estrategia de ejecución para una consulta distribuida puede ser descrita con los operadores del álgebra relacional y con primitivas de comunicación para transferir datos entre nodos. Para encontrar una buena transformación se consideran las características de los fragmentos, tales como, sus cardinalidades. Un aspecto importante de la optimización de consultas es el ordenamiento de juntas, dado que algunas permutaciones de juntas dentro de la consulta pueden conducir a un mejoramiento de varios órdenes de magnitud. La salida de la capa de optimización global es una consulta algebraica optimizada con operación de comunicación incluida sobre los fragmentos. Optimización Local de Consultas El trabajo de la última capa se efectúa en todos los nodos con fragmentos involucrados en la consulta. Cada subconsulta que se ejecuta en un nodo, llamada consulta local, es optimizada usando el esquema local del nodo. Hasta este momento, se pueden eligen los algoritmos para realizar las operaciones relacionales. La optimización local utiliza los algoritmos de sistemas centralizados. viernes, 23 de julio de 2021 Base de Datos Distribuidas 54 3.3.2 OPTIMIZACIÓN LOCAL DE CONSULTAS ¿Que se busca con la optimización local de consultas? El programador al momento de diseñar sus bases de datos, busca mejorar los siguientes dos criterios: ✓ Tiempo de ejecución ✓ Espacio de memoria utilizado Esto se realiza mediante operaciones, métodos, que ayudan a reducir los costos de comunicación y el consumo de recursos de la CPU. El manejo de los costos de comunicación se define por las métricas utilizadas, para cada nodo, como las bases de datos distribuidas operan bajo una arquitectura de red, se definen costos de comunicaciones. Los diferentes factores pueden tener pesos diferentes dependiendo del ambiente distribuido en el que se trabaje. La optimización local se basa específicamente en condiciones locales dentro de un programa fuente, y no se contempla el flujo de ejecución del programa, para este tipo de optimización lo que se contempla es particionar el código en bloques básicos de código (alto nivel) y sobre estos fragmentos se lleva a cabo la optimización. viernes, 23 de julio de 2021 Base de Datos Distribuidas 55 3.3.2 OPTIMIZACIÓN LOCAL DE CONSULTAS El trabajo de la última capa se efectúa en todos los nodos con fragmentos involucrados en la consulta. Cada subconsulta que se ejecuta en un nodo, llamada consulta local, es optimizada usando el esquema local del nodo. Hasta este momento, se pueden eligen los algoritmos para realizar las operaciones relacionales. La optimización local sirve cuando un bloque de programa o sección es crítico por ejemplo: la E/S, la concurrencia, la rapidez y confiabilidad de un conjunto de instrucciones. Características ❑ La optimización local se realiza sobre módulos del programa. ❑ La optimización sólo se ve reflejada en dichas secciones. ❑ Como el espacio de soluciones es más pequeño la optimización local es más rápida viernes, 23 de julio de 2021 Base de Datos Distribuidas 56 Gracias por su atención viernes, 23 de julio de 2021 Base de Datos Distribuidas 57