Manejo de Transacciones Distribuidas
-
Upload
huichokike -
Category
Documents
-
view
128 -
download
0
Transcript of Manejo de Transacciones Distribuidas
PROPIEDADES DE LAS
TRANSACCIONES
Atomicidad“O haces todo o no haces nada, a medias nada”
ANTES
Pepe Toño$100 $50
TRANSACCION
$25
DESPUES
Pepe Toño$75 $75
TRANSACCION COMPLETADA CON EXITO
Durabilidad“Los cambios hechos por una transacción deben durar por toda la eternidad”
10/Mayo/2011
Pepe Toño$75 $75
11/Mayo/2011
Pepe Toño$75 $75
21/Mayo/2011
Pepe Toño$75 $75
Nota: Estamos considerando que no ha habido otra transferencia entre las cuentas
Serialibidad“Si 2 o mas transacciones se hacen a la vez, el sistema las debe hacer bien”
10/Mayo/2011 07:30am
Pepe Toño
$25
Luis Paco$200 $100
Pepe$75
Las transacciones que ocurren al mismo tiempo se deben ejecutar como si se hubieran ejecutado una después de otra
10/Mayo/2011 07:30am
$50
10/Mayo/2011 07:31am
$75 $75
Toño$75
Luis$150
Paco
$150
Aislamiento“Las transacciones incompletas no deben informar sus resultados”
ANTES
Pepe Toño$100 $50
TRANSACCION
$25
DESPUES
Pepe Toño$75 $75
$75 $50
$75 $75
OBJETIVOS DEL
MANEJADOR DE
TRANSACCIONES
Utilización del CPU y la memoria principal
SISTEMA CENTRALIZADO SISTEMA DISTRIBUIDO
Pocos Recursos Mayores Recursos
Mensajes de Control
= + +
CPUMemoria Principal
Mensajes de Control
Tiempo de Respuesta
SISTEMA CENTRALIZADO SISTEMA DISTRIBUIDO
Menor Mayor
Disponibilidad
Yucatán Coahuila Distrito Federal
Contribuyentes Contribuyentes
¿Puedo conocer los contribuyentes de Coahuila si Yucatán no esta disponible?
TRANSACCIONESDISTRIBUIDAS
Estructura de una Transacción
Begin_Transaction
Commit Abort
Cuerpo de la transacción
Agente
Ejemplo de 1 Transacción
ENCONTRAR_TRANSFERENCIALeer (terminal, $cantidad, $cuenta_Origen, cuenta_Destino)Begin_Transaction;SELECT cantidad INTO $cantidad FROM cuentaWHERE numero_Cuenta=$cuenta_Origen;IF $cantidad-cantidad<0 THEN ABORT;ELSE BEGIN UPDATE cuenta SET cantidad=cantidad-$cantidad WHERE cuenta=$cuenta_Origen; UPDATE cuenta SET cantidad=cantidad+$cantidad WHERE cuenta=$cuenta_Destino; COMMIT ENDENDIF
SISTEMA CENTRALIZADO
Ejemplo de 1 TransacciónAGENTE-RAIZLeer (terminal, $cantidad, $cuenta_Origen, cuenta_Destino)Begin_Transaction;SELECT cantidad INTO $cantidad FROM cuentaWHERE numero_Cuenta=$cuenta_Origen;IF $cantidad-cantidad<0 THEN ABORT;ELSE BEGIN UPDATE cuenta SET cantidad=cantidad-$cantidad WHERE cuenta=$cuenta_Origen; CREATE agente1; SEND TO agente1($cantidad, $cuenta_Destino); COMMIT; ENDENDIF
SISTEMA DISTRIBUIDO
Ejemplo de 1 Transacción SISTEMA DISTRIBUIDO
AGENTE1:RECEIVE FROM agente_raiz($cuenta_Origen, cuenta_Destino) UPDATE cuenta SET cantidad=cantidad+$cantidad WHERE cuenta=$cuenta_Origen;