Bases de datos distribuidas (dblinks)
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ónHOST
: Nombre/IP del servidorPORT
: Puerto TCP de conexiónSERVICE_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 serhost:port/service
- Si el puerto es
1521
, puede omitirse
- Si el puerto es
- Un nombre de
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)
, dondeusuario
indica si la fila viene deDBLINKA
oDBLINKB
4. Referencias
- Formatos:
- Creado con:
- Alojado en Github