jueves, 8 de noviembre de 2012


MANEJO DE TRANSACCIONES

Se llama Transacción a una colección de operaciones que forman una unidad lógica de trabajo en una BD realizada por una o más sentencias SQL estrechamente relacionadas.

Una transacción es una unidad de la ejecución de un programa que lee y escribe datos a y desde la Base de Datos. Puede consistir en varias operaciones de acceso a la base de datos. Una Transacción está delimitada por instrucciones de inicio transacción y fin transacción (la transacción consiste en todas las operaciones que se ejecutan entre inicio transacción y fin transacción).

El concepto de transacción se desarrolló para atender los casos en los que el estado resultante de la base de datos depende del éxito completo en una serie de operaciones. Este concepto vio la luz debido a que varias operaciones sucesivas pueden modificar el resultado de operaciones anteriores. En esos casos, si alguna operación produce un error, el estado resultante puede ser indeterminado.

Para solucionar este problema, las transacciones agrupan una serie de operaciones de manera que es posible garantizar la integridad del resultado final. O todas las operaciones se ejecutan con éxito y se confirman (se escriben en la base de datos), o toda la transacción se considera no realizada. La acción de cancelar una transacción se denomina deshacer la transacción. Deshacer una transacción permite anular los cambios y recuperar el estado de la base de datos previo a la transacción.

Por ejemplo, en una transacción bancaria automatizada, si un banco transfiere dinero desde la cuenta A a la cuenta B, la retirada de fondos de A y el depósito en B deben producirse con éxito para procesar los fondos correctamente, de lo contrario la transacción entera debe cancelarse.

Esquematizando el proceso de transacciones temos: O se ejecutan todas las operaciones que componen la transacción, o no se realiza ninguna.

En SQL
ÉxitoFracaso
Begin transacction
  Instrucción  1
  Instrucción  2
  ...
  Commit workEnd transacction
Begin transacction
 Instrucción  1
 Instrucción  2
  ...
 Rollback workEnd transacction


Propiedades de la Transacción
Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades ACID (atomicidadcoherenciaaislamiento y durabilidad), para ser calificacada como transacción.


  • Atomicity : Una Transacción (Tx) se ejecuta completamente ó de otra manera se eliminan los cambios parciales realizados.
    Begin Transaction - Programa - End Transaction
    Responsable: El método de recuperación, de no completar todas las operaciones, devuelve la BD a su estado anterior a empezar esa Tx(rollback).
  • Coherencia:  Asegura que los datos queobservamos no cambian (por otros usuarios) hasta que acabemos la Transacción.
    Después de terminar una Transacción la Base de datos no viola ninguna de sus reglas: valores obligatorios, claves únicas,etc.
    Responsable: los programadores mediante la definición adecuada de laintegridad referencialchecktriggersprimary keyforeign key,…
  • Aislamiento: Los efectos de una Tx no son visibles a otros usuarios mientras no se confirmen.
    Una Transacción en ejecución no puede revelar sus resultados a otras transacciones concurrentes antes de finalizar.
    Más aun, si varias transacciones, se ejecutan concurrentemente, los resultados deben ser los mismos que si ellas se hubieran ejecutado secuencialmente. Esto se conoce como seriabilidad debido a que su resultado es la capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones para finalizar con los datos en el mismo estado en que estaban después de realizar transacciones originales.d
    Responsable: el método de concurrencia: mecanismos, reglas, protocolos
  • Durabilidad: Si el sistema falla no debe permitir que se pierdan las operaciones realizadas por Tx ya confirmadas.
    Responsable: el método o gestor de recuperación.




Estados y operaciones de una transacción


Control de transacciones en Oracle

Inicio de transacción


Cuando no hay ya una transacción en progreso, y se ejecuta una sentencia LDD o LMD(interactivamente o dentro de una aplicación)


Cada sentencia LDD es tratada como una transacción N


No existe sentencia de tipo BEGIN TRANSACTION


Fin de transacción

COMMIT: 
Finaliza la transacción actual y hace permanentes (confirma) los cambios realizados
ROLLBACK: Finaliza la transacción actual y deshace los cambios realizados


Sentencia COMMIT

Una sentencia COMMIT marca el final de una transacción correcta, implícita o definida por el usuario. COMMIT hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, y además, libera los recursos mantenidos por la conexión. Su sintaxis es la siguiente:


COMMIT COMMENT 'mensaje' | FORCE 'texto']

COMMENT sirve para comentar la transacción en un máximo 255 caracteres. FORCEfuera de modo manual una transacción dudosa y es de uso exclusivo en sistemas distribuidos de base de datos. 



Sentencia SAVEPOINT

Esta sentencia permite crear un punto de restauración dentro de una transacción, es decir, un punto al que podremos retroceder deshaciendo todo lo hecho deshaciendo todo lo hecho desde él en adelante. Su sintaxis es la siguiente


SAVEPOINT nombrePuntoRestauración;


Sentencia ROLLBACK


Señala el final sin éxito de una transacción, elimina todas las modificaciones de datos realizadas desde el inicio de la transacción y también libera los recursos que retiene la transacción. Su sintaxis es la siguiente:


ROLLBACK [WORK] [TO SAVEPOINT nombrePuntoRestauración | FORCE 'texto'];




PREGUNTAS

Que es algebra relacional?

El álgebra relacional es un conjunto de operaciones que describen paso a paso como computar una respuesta sobre las relaciones, tal y como éstas son definidas en el modelo relacional.


Como se aplica el algebra relacional a la optimizacion de consultas en Mysql?
MySQL registra las consultas de tipo SELECT y su resultado. Como lo normal es que se acceda a la base de datos a través de una aplicación, las consultas repetidas son muy frecuentes (listas de poblaciones, de códigos, de nombres…).•Si MySQL recibe una consulta que tiene en la caché, simplemente entrega al cliente el mismo conjunto de resultados que produjo en su ejecución anterior. Naturalmente, las consultas de modificación de datos (INSERT, DELETE, UPDATE…) invalidan las consultas afectadas de la caché y provocan la eliminación de estas de la caché. 













miércoles, 7 de noviembre de 2012


RESUMEN

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. La optimización de consultas es, entonces, una de estas etapas.

Existen distintos métodos para optimizar consultas relacionales, sin embargo el enfoque de optimización basada en costos combinado con heurísticas que permitan reducir el espacio de búsqueda de la solución es el método mayormente utilizado por los motores de base de datos relaciones de la actualidad, en todo caso, independiente del método elegido para optimizar la consulta, la salida de este proceso debe ser un plan de ejecución, el cual comúnmente es representado en su forma de árbol relacional.

 

Optimización de consultas

El objetivo del procesamiento de consultas en un ambiente distribuido es transformar una consulta sobre una base de datos distribuida en una especificación de alto nivel a una estrategia de ejecución eficiente expresada en un lenguaje de bajo nivel sobre bases de datos locales.
Por ejemplo:

En las redes de área amplia (WAN), normalmente el costo de comunicación domina dado que hay una velocidad de comunicación relativamente baja, los canales están saturados y el trabajo adición al requerido por los protocolos de comunicación es considerable.

Así, los algoritmos diseñados para trabajar en una WAN, por lo general, ignoran los costos de CPU y de I/O. En redes de área local (LAN) el costo de comunicación no es tan dominante, así que se consideran los tres factores con pesos variables.

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.

Optimización Local de Consultas 

El trabajo de la última capa se efectúa en todos los nodos con fragmentos involucrados en la consulta.

martes, 6 de noviembre de 2012


Álgebra relacional





 El álgebra relacional es un conjunto de operaciones que describen paso a paso como computar una respuesta sobre las relaciones, tal y como éstas son definidas en el modelo relacional. Denominada de tipo procedimental, a diferencia del Cálculo relacional que es de tipo declarativo.
Describe el aspecto de la manipulación de datos. Estas operaciones se usan como una representación intermedia de una consulta a una base de datos y, debido a sus propiedades algebraicas, sirven para obtener una versión más optimizada y eficiente de dicha consulta.

Las operaciones

 Básicas

Cada operador del álgebra acepta una o dos relaciones y retorna una relación como resultado. σ y Π son operadores unarios, el resto de los operadores son binarios. Las operaciones básicas del álgebra relacional son:
 Seleccióna (σ)
Permite seleccionar un subconjunto de tuplas de una relación (R), todas aquellas que cumplan la(s) condición(es) P, esto es:

   \sigma_P(R) \!
Ejemplo:

   \sigma_{Apellido=Gomez}(Alumnos) \!
Selecciona todas las tuplas que contengan Gómez como apellido en la relación Alumnos.
Una condición puede ser una combinación booleana, donde se pueden usar operadores como: \wedge , \vee, combinándolos con operadores <, >, \le, \ge, =, \ne.
 Proyección (Π)
Permite extraer columnas (atributos) de una relación, dando como resultado unsubconjunto vertical de atributos de la relación, esto es:

   \Pi_{A_1,A_2,\dots,A_n} \!
donde A_1,A_2,\dots,A_n son atributos de la relación R .
Ejemplo:

   \Pi_{Apellido,Semestre,NumeroControl}(Alumnos) \!
Selecciona los atributos Apellido, Semestre y NumeroControl de la relación Alumnos, mostrados como un subconjunto de la relación Alumnos
 Producto cartesiano (x)
El producto cartesiano de dos relaciones se escribe como:
R \times S
y entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de Rseguidos por los de S.
Ejemplo:

   Alumnos \times Maestros
Muestra una nueva relación, cuyo esquema contiene cada una de las tuplas de la relación Alumnos junto con las tuplas de la relación Maestros, mostrando primero los atributos de la relación Alumnos seguidos por las tuplas de la relación Maestros.
 Unión (∪)
La operación
R \cup S
retorna el conjunto de tuplas que están en R, o en S, o en ambas. R y S deben seruniones compatibles.
Diferencia (-)
La diferencia de dos relaciones, R y S denotada por:
R - S \!
entrega todas aquellas tuplas que están en R, pero no en S. R y S deben ser uniones compatibles.

Estas operaciones son fundamentales en el sentido en que (1) todas las demás operaciones pueden ser expresadas como una combinación de éstas y (2) ninguna de estas operaciones pueden ser omitidas sin que con ello se pierda información.

No básicas o Derivadas

Entre los operadores no básicos tenemos:
 Intersección (∩)
La intersección de dos relaciones se puede especificar en función de otros operadores básicos:
 R \cap S = R - (R - S)
La intersección, como en Teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S uniones compatibles.
 Unión natural (\bowtie) (Natural Join)
La operación unión natural en el álgebra relacional es la que permite reconstruir las tablas originales previas al proceso de normalización. Consiste en combinar las proyección, selección y producto cartesiano en una sola operación, donde la condición  \theta es la igualdad Clave Primaria = Clave Externa (o Foranea), y la proyección elimina la columna duplicada (clave externa).
Expresada en las operaciones básicas, queda
 R \bowtie S = \Pi_{A1,A2...An} ( \sigma_\theta (R\times S) )

Una reunión theta ( θ-Join) de dos relaciones es equivalente a:
 R \bowtie_\theta S = \sigma_\theta (R\times S)
donde la condición  \theta  es libre.
Si la condición  \theta  es una igualdad se denomina EquiJoin.
 División (/)
Supongamos que tenemos dos relaciones A(x, y) y B(y) donde el dominio de y en A y B, es el mismo.
El operador división A / B retorna todos los distintos valores de x tales que para todo valor y en B existe una tupla \langle x,y \rangle en A.
 Agrupación (Ģ)
Permite agrupar conjuntos de valores en función de un campo determinado y hacer operaciones con otros campos.
Por ejemplo: Ģ sum(puntos) as Total Equipo (PARTIDOS).


Ejemplos!

Alumno
IDNOMBRECIUDADEDAD
01PedroBogota14
11JuanCali18
21DiegoCartagena12
31RositaMedellin15
41ManuelCartagena17

Apoderado
IDNOMBREFONOID_ALUMNO
054Víctor65464421
457José45465411
354María99745531
444Paz74742301

Curso
CODNOMBREFECHA_INICIODURACIONVALOR
01142Sicología13-01153.000
02145Biología15-02122.500
03547Matemáticas01-03304.000
04578Música05-04101.500
05478Física20-04153.200

Inscrito
IDID_ALCOD
10105478
20102145
31103547
42102145
54103547



Mostrar los nombres de los alumnos y su apoderado
Primero, realizaremos una combinación entre alumnos y apoderados (pues necesitamos saber a que alumno le corresponde tal apoderado). La combinación realizará un producto cartesiano, es decir, para cada tupla de alumnos (todas las filas dealumnos) hará una mezcla con cada una tupla de apoderados y seleccionará aquellas nuevas tuplas en que alumnos.id sea igual a apoderados.id_alumno, esto es:

ID (alumno)NOMBRE (alumno)CIUDADEDADID (apoderado)NOMBRE (apoderado)FONOID_ALUMNO
01PedroSantiago14054Víctor65464421
01PedroSantiago14457José45465411
01PedroSantiago14354María99745531
01PedroSantiago14444Paz74742301
11JuanBuenos Aires18054Víctor65464421
11JuanBuenos Aires18457José45465411
11JuanBuenos Aires18354María99745531
11JuanBuenos Aires18444Paz74742301
21DiegoLima12054Víctor65464421
21DiegoLima12457José45465411
21DiegoLima12354María99745531
21DiegoLima12444Paz74742301
31RositaConcepción15054Víctor65464421
31RositaConcepción15457José45465411
31RositaConcepción15354María99745531
31RositaConcepción15444Paz74742301
41ManuelLima17054Víctor65464421
41ManuelLima17457José45465411
41ManuelLima17354María99745531
41ManuelLima17444Paz74742301


Analizador sintáctico



Un analizador sintáctico (en inglés parser) es una de las partes de un compilador que transforma su entrada en un árbol de derivación.
El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada. Un analizador léxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintáctico para construir la estructura de datos, por ejemplo un árbol de análisis o árboles de sintaxis abstracta.
El análisis sintáctico también es un estado inicial del análisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexión gramatical, como los idiomas romances o el latín. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto. Cabe notar que existe una justificación formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autómata de pila, de modo que todo analizador sintáctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autómata de pila.
Los analizadores sintácticos fueron extensivamente estudiados durante los años 70 del siglo XX, detectándose numerosos patrones de funcionamiento en ellos, cosa que permitió la creación de programas generadores de analizadores sintáticos a partir de una especificación de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales como yacc, GNU bison y javaCC.


Heurística (informática)

En computación, dos objetivos fundamentales son encontrar algoritmos con buenos tiempos de ejecución y buenas soluciones, usualmente las óptimas. Una heurística es un algoritmo que abandona uno o ambos objetivos; por ejemplo, normalmente encuentran buenas soluciones, aunque no hay pruebas de que la solución no pueda ser arbitrariamente errónea en algunos casos; o se ejecuta razonablemente rápido, aunque no existe tampoco prueba de que siempre será así. Las heurísticas generalmente son usadas cuando no existe una solución óptima bajo las restricciones dadas (tiempo, espacio, etc.), o cuando no existe del todo.
A menudo, pueden encontrarse instancias concretas del problema donde la heurística producirá resultados muy malos o se ejecutará muy lentamente. Aun así, estas instancias concretas pueden ser ignoradas porque no deberían ocurrir nunca en la práctica por ser de origen teórico. Por tanto, el uso de heurísticas es muy común en el mundo real.

Objetivos de los sistemas de bases de datos

Corregir anomalías en el acceso concurrente: Para mejorar el funcionamiento del sistema y tener un tiempo de respuesta más corto, muchos sistemas permiten que varios usuarios actualicen la información simultáneamente. En un ambiente de este tipo, la interacción de las actualizaciones concurrentes puede resultar en información inconsistente. Para prevenir estas situaciones debe mantenerse alguna forma de supervisión en el sistema.

Arboles de consultas 


Transformaciones equivalentes 

1.-el servidor recive una peticion de un nodo
2.-el servidor es atacado por el acceso concurrente a la base de datos cargada localmente
3.-el servidor muestra un resultado y le da un hilo a cada una de las maquinas nodo de la red local.

Una base de datos es accesada 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 ok.
Bueno para realizar una transformación en la consulta primero desfragmentamos siguiendo los estandares marcados por las reglas formales y posteriormente realizamos el envio y la maquina que recibe es la que muestra el resultado pertinente para el usuario, de esta se puede producir una copia que sera la equivalente a la original.

miércoles, 31 de octubre de 2012


Optimización de consultas

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.
En bases de datos relacionales el lenguaje de consultas SQL es el más utilizado por el común de los programadores y desarrolladores para obtener información desde la base de datos. La complejidad que pueden alcanzar algunas consultas puede ser tal, que el diseño de una consulta puede tomar un tiempo considerable, obteniendo no siempre una respuesta óptima.

Tuplas
Una tupla de una relación o de una tabla corresponde a una fila de aquella tabla. Las tuplas están comúnmente desordenadas puesto que matemáticamente una relación se define como un conjunto y no como una lista. No existen tuplas duplicadas en una relación o tabla dado el hecho de que una relación es un conjunto y los conjuntos por definición no permiten elementos duplicados.
Un corolario importante en este punto es que la llave primaria siempre existe dada la condición de unicidad de las tuplas, por lo tanto, como mínimo la combinación de todos los atributos de una tabla puede servir para la conformación de la llave primaria, sin embargo usualmente no es necesario incluir todos los atributos, comúnmente algunas combinaciones mínimas son suficientes.

Relación
Formalmente, una relación R es un conjunto de n-tuplas.
Las propiedades fundamentales de una relación son:
  • No hay tuplas repetidas.
  • Las tuplas no están ordenadas.
  • Los atributos no están ordenados.
Cuando vamos a realizar este proceso debemos tener en cuenta aspectos tales como:
  • Evaluación de que la consulta es algebraicamente más correcta
  • Evaluación de la carga sobre los recursos del sistema

Ejemplo

A continuación podemos observar un ejemplo de la problemática de optimización. En este simple problema tenemos tablas de “Suppliers” (S) y “Orders” (SP)con 100 administradores y 10.000 pedidos. Consulta: “Obtener los nombres de los suministradores que nos sirven la pieza P2”. Consideraremos que sólo 50 tuplas de SP corresponden a la pieza P2.
SELECT DISTINCT S.NOMBRE FROM S, SP WHERE S.S#=SP.S# AND SP.P#=”P2”;
En el anterior ejercicio tenemos un producto cartesiano S x SP 100 x 10.000 = 1.000.000 de tuplas leídas. Probablemente 1.000.000 de tuplas escritas en memoria virtual. Cuando utilizamos la sentencia WHERE pasamos de 1.000.000 de tuplas leídas a 50 tuplas, luego realizamos una proyección sobre S.NOMBRE, dando como resultado un máximo de 50 tuplas.

Procedimientos

Seleccionar en SP las tuplas de la pieza P2. Se realizará lectura de 10.000 tuplas dando como resultado: 50 tuplas. Hacer JOIN de la tabla anterior. Con la tabla S se realizara lectura de 100 tuplas, dando como resultado: 50 tuplas con proyección sobre S.NOMBRE, dando como resultado un máximo de 50 tuplas.

Conclusión

El segundo procedimiento es unas 300 veces mejor, ya que el primero realiza 3.000000.000 operaciones de E/S, frente a 10..100 del segundo.

¿Dónde 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.
El proceso de optimización
1.1. Representación interna de consultas. 1.2. Conversión a forma canónica. 1.3. Elección de procedimientos de bajo nivel. 1.4. Generación y elección de planes de consulta.

Representación interna de consultas

  • Características:
    • Ser relacionalmente completo.
    • Suministrar un punto de partida sólido para las siguientes fases.
    • Proporcionar un grado de libertad suficiente para realizar las posibles optimizaciones.
  • Sistemas de representación:

Conversión a forma canónica

En la conversión canónica encontramos que hay optimizaciones previas que tienen un resultado positivo seguro. En este paso debemos encontrar la expresión equivalente de una consulta dada en la que se mejore de alguna manera el rendimiento. Esta expresión equivalente será la FORMA CANONICA de dicha consulta.

Elección de procedimientos de bajo nivel

En la elección de procedimientos de bajo nivel se debe evaluar la consulta previamente transformada, también encontraremos existencia de índices u otras rutas de acceso y la distribución de los valores de los datos almacenados. Luego se realizará un agrupamiento físico de los registros.
  • Un optimizador debe tener algunos procedimientos disponibles para una operación de join tales como:
  • Un procedimiento para el caso en que la condición sea a través de una clave candidata.
  • Un procedimiento para el caso en que el campo de restricción (en alfa unión) esté indexado.
  • Un procedimiento para el caso en que el campo de restricción no esté indexado pero sí agrupados los datos físicamente.

Generación y elección de planes de consulta

Cuando elegimos un plan una de las primeras cosas que debemos tener en cuenta para escogerlo es la estimación de costes. Estos costes dependen de muchos aspectos tales como: el nº de operaciones de entrada/salida del disco requeridas, la utilización de la CPU. Una consulta suele implicar la generación de resultados intermedios, estos resultados estarán directamente relacionados con el número de E/S.

lunes, 22 de octubre de 2012

Estrategias de procesamiento 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. La optimización de consultas es, entonces, una de estas etapas.





Existen distintos métodos para optimizar consultas relacionales, sin embargo el enfoque de optimización basada en costos combinado con heurísticas que permitan reducir el espacio de búsqueda de la solución es el método mayormente utilizado por los motores de base de datos relaciones de la actualidad, en todo caso, independiente del método elegido para optimizar la consulta, la salida de este proceso debe ser un plan de ejecución, el cual comúnmente es representado en su forma de árbol relacional.



Arboles de consultas



Transformaciones equivalentes



1.-el servidor recive una peticion de un nodo

2.-el servidor es atacado por el acceso concurrente a la base de datos cargada localmente

3.-el servidor muestra un resultado y le da un hilo a cada una de las maquinas nodo de la red local.


Una base de datos es accesada 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 ok.

Bueno para realizar una transformación en la consulta primero desfragmentamos siguiendo los estandares marcados por las reglas formales y posteriormente realizamos el envio y la maquina que recibe es la que muestra el resultado pertinente para el usuario, de esta se puede producir una copia que sera la equivalente a la original.



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 tipo de JOIN: interno, externo, y cruzado.

En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.

Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una función de composición.

lunes, 8 de octubre de 2012

ALGORITMOS DE DISTRIBUCIÓN DE DATOS NO REPLICADAS.


Una base de datos no replicada guarda una base de datos en un solo sitio por consiguiente, por consiguiente no existe no existen base de datos duplicadas.
Varios factores influyen en la decisión de utilizar replicas de datos.
Tamaño de base de datos.
Frecuencia de usos.
Costos- de desempeño, software,  indirectos y de administración, - asociados con la sincronización de las transacciones y de sus componentes vs beneficios de tolerancias a las fallas asociados con los datos  replicados.

Permite maximizar el costo de comunicación y al mismo tiempo maximizar el tiempo de respuesta. El administrador de bases de datos debe de evaluar el modo de operar de la base de datos, es decir como su nombre lo indica no podemos realizar el algoritmo en aquellas copias, pero debe ser sobre la base de datos original .La fragmentación hibrida es de preferencia lo que debe de llevar este tipo de algoritmos, porque estas utilizan las tres fragmentaciones y las mas aconsejables.
Hablar de algoritmos implica sobre la Programación
Hay gestores que son muy flexibles en cuestiones de programación, mientras que otros ofrecen más rendimiento. Así, al diseñar el algoritmo tendrá que hacer toda la información referente a la vida de la base de datos pero por otro lado deberá buscar siempre de darle soluciones al usuario, pues este será el que al final de cuentas interesa. Existen en la actualidad infinidad de tecnologías en cuanto a los gestores de la base de datos se refiere, el que utilizaremos (el mas actual) será SQL SERVER, este gestor comenzó a crearse por la década de los 90´s, ofrece muchas ventajas sobre otros gestores, la única desventaja que podríamos encontrar en su compatibilidad con los Windows mas comerciales como el 98, XP entre otros. Se preguntaran que tiene que ver el gestor con los algoritmos de datos no replicados, sin embargo la respuesta es muy sencilla, y esta es que este algoritmo es fácil de implantar en SQL SERVER.
Tipos de datos:Varchar2 (Tamaño).-
Almacena cadenas de caracteres de una longitud variable, la longitud máxima son 4000 caracteres.

Char (Tamaño).-
Almacena caracteres con una longitud fija. Siendo 2000 caracteres el máximo.

Number (Precisión, escala).-
Almacena datos numéricos tanto enteros como decimales, con o sin signo.

Precisión.- Indica el número máximo de dígitos que va a tener el dato.

Escala.- Indica el número de dígitos que puede hacer a la derecha del punto decimal.

Long.-
Almacena cadenas de caracteres de longitud variable puede almacenar hasta 2Gigas de información.

Long raw.-
Almacena datos binarios se emplea para el almacenamiento de gráficos, sonidos, etc. Su tamaño máximo es de 2 Gigas.

Date.-
Almacena información de fechas y horas, de forma predeterminada almacena un dato, e el siguiente formato: Siglo / Año / Mes / Día / Hora /Minutos / Segundos. Este formato se puede cambiar con otros parámetros.

Raw (tamaño).-
Almacena datos binarios, puede almacenar como mucho 2000 Bytes.

Rowid.-
Se tarta de un campo que representa una cadena hexadecimal que indica ladirección de una fila en su tabla.

Nvarchar2 (tamaño).-
Es similar al Varchar2 pero el tamaño de un carácter depende dela elección del juego de caracteres. El tamaño máximo es de 2000 Bytes.

Nchar (tamaño).-
Similar al Char y con las mismas características que el Nvarchar2.
Clock.-
Similar al Long y se usa para objetos carácter.

Nclock.-
Similar al Clock solo que el tamaño del carácter depende del juego de caracteres utilizado.
Blob.-
Similar al Long raw, este se usa para objetos binarios.

Debido al uso que se da a las redes de computadoras en la actualidad incluyendo Internet, cada vez es más factible implementar Sistemas de Bases de Datos Distribuidas, sin embargo, esta tecnología lleva a los desarrolladores a enfrentar un problema, la carencia de metodologías y herramientas de apoyo para su diseño que permitan decidir la ubicación de los datos en cada uno de los diferentes sitios que componen la red de computadoras. Este problema se conoce como Diseño de la Distribución y nace de la necesidad de especificar las unidades de almacenamiento adecuadas, ya sea fragmentos verticales, horizontales o mixtos, junto con su ubicación dentro de la aplicación. El Modelo FURD, ha sido desarrollado para resolver el problema del diseño de las Bases de Datos Distribuidas, el cual esta divido en dos etapas o fases: la fragmentación y la ubicación defragmentos. Estas fases ya se concentran en el Modelo FURD. Una vez que se resuelve el Modelo FURD se puede dar solución al problema del diseño. Sin embargo la dificultad radica precisamente en la forma de resolverlo, pues es un problema de optimización muy complejo que a medida que va creciendo su tamaño, se va haciendo más difícil la forma de resolverse.