alvaro.gonzalezsotillo@educa.madrid.org

Bases de datos distribuidas (dblinks)

Álvaro González Sotillo

Created: 2024-09-08 dom 17:52

1. Introducción

  • Hasta ahora, la base de datos es un SPOF (single point of failure)
  • Para evitar este problema, las bases de datos se suelen distribuir
    • Se reparten los datos entre varios servidores
    • Los datos pueden estar o no replicados

1.1. Ventajas de la distribución

  • Tolerancia a fallos
  • Escalabilidad y balanceo de carga
    • CPU
    • Disco
  • Posiblemente, mayor velocidad de lectura

1.2. Desventajas

  • Mayor complejidad
    • Despliegue
    • Lógica de los programas clientes
    • ACID más difícil (aunque suele estar resuelto por los SGBD)
  • Generalmente, escrituras más lentas

2. Particiones de los datos

  • Horizontal
    • Las filas de una tabla se reparten entre servidores
  • Vertical
    • Las columnas de una tabla se reparten entre servidores
  • Mixta
    • Horizontal y vertical combinadas

2.1. Partición horizontal

FECHA NOMBRE PADRE MADRE SITIO
xxxxx yyyyyy zzzz wwwww Santiago Apóstol
xxxxx yyyyyyy zzzz wwwww Santiago Apóstol

FECHA NOMBRE PADRE MADRE SITIO
xxxxx yyyyyy zzzz wwwww Almudena
xxxxx yyyyyyy zzzz wwwww Almudena

FECHA NOMBRE PADRE MADRE SITIO
xxxxx yyyyyy zzzz wwwww Sagrada Familia
xxxxx yyyyyyy zzzz wwwww Sagrada Familia

  • El registro eclesiástico se divide por parroquias
  • La tabla completa se recupera con UNION

2.2. Partición vertical

DNI (pk) FACTURA CUENTAS DE BANCO HERENCIAS LOTERÍA ALQUILER
           
           
  • Las facturas son personales.
  • Las cuentas las conoce el banco
  • El gestor maneja las herencias, alquileres y premios de lotería
  • La información completa de las finanzas se recupera con un JOIN

3. DBLink

  • Un servidor de Oracle hace de cliente de otro servidor
  • Puede servir para particionado vertical/horizontal
  • Las transacciones se coordinan entre todos los servidores de base de datos
    • ACID

3.1. Fichero tnsnames.ora

  • Es el fichero que usan los clientes de Oracle
  • Incluye todos los servidores conocidos por los clientes
  • En $ORACLE_HOME/network/admin/tnsnames.ora
  • En este ejemplo:
    • XE : Nombre de la conexión
    • HOST : Nombre/IP del servidor
    • PORT : Puerto TCP de conexión
    • SERVICE_NAME : SID
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = profebd.local)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

3.2. Creación de dblink

  • Suponiendo una conexión de nombre B
Create database link LNK_DE_A_a_B 
  connect to USUARIO 
  identified by CONTRASEÑA 
  USING 'B';
  • Referencia a tablas remotas:
select * from TABLA@LNK_DE_A_a_B; 
  • Llamada a funciones/procedimientos remotos:
procedimiento@LNK_DE_A_a_B( parametro );

3.3. Cadena de conexión

  • La cadena de conexión puede ser:
    • Un nombre de tnsnames.ora
    • Desde la versión 10.2, puede ser host:port/service
      • Si el puerto es 1521, puede omitirse
Create database link LNK_DE_A_a_B 
  connect to USUARIO 
  identified by CONTRASEÑA 
  USING 'servidorB.com/XE';

3.4. Cerrar conexiones

  • Cada usuario que utilice el dblink crea una conexión
  • Se cierra automáticamente cuando el usuario cierre su conexión inicial
  • Se puede forzar el cierre con
ALTER SESSION CLOSE DATABASE LINK linkname;

3.5. Ejercicio

SERVIDOR A SERVIDOR B
Crea el usuario DBLINKA Crea el usuario DBLINKB
Crea la tabla TABLAA(clave integer, valor varchar(255)) Crea la tabla TABLAB(clave integer, valor varchar(255))
Crea un dblink al otro servidor Crea un dblink al otro servidor
Crea un sinónimo para acceder a TABLAB sin el @dblink Crea un sinónimo para acceder a TABLAA sin el @dblink
Crea una vista TABLATOTAL, con las filas de TABLAA y TABLAB Crea una vista TABLATOTAL, con las filas de TABLAA y TABLAB

  • Las columnas de TABLATOTAL serán (usuario,clave,valor), donde usuario indica si la fila viene de DBLINKA o DBLINKB

4. Referencias