Concurrencia y transacciones - script 2008
From Ibbddunq
Line 1: | Line 1: | ||
==Esquema de BD de ejemplo== | ==Esquema de BD de ejemplo== | ||
<code> | <code> | ||
- | encomienda <nroEncomienda, cliente, peso, precioAsegurado> | + | encomienda <nroEncomienda, cliente, peso, precioAsegurado> <br/> |
- | servicio <nroServicio, origen, destino, partida, llegada, cargaRestante> | + | servicio <nroServicio, origen, destino, partida, llegada, cargaRestante> <br/> |
- | encomiendaEnServicio <nroServicio, nroEncomienda> | + | encomiendaEnServicio <nroServicio, nroEncomienda> <br/> |
</code> | </code> | ||
Line 11: | Line 11: | ||
BDs monousuario y multiusuario. | BDs monousuario y multiusuario. | ||
- | Anomalías de concurrencia | + | '''Anomalías de concurrencia''' |
- | + | ||
- | * phantom read. | + | 1. non-repeatable read y su consecuencia respecto de los UPDATE. |
+ | Ponele una transacción que agrega una encomienda para un único servicio | ||
+ | <code> | ||
+ | PROCEDURE `cargarEncomienda1`(elCliente varchar(45), elPeso integer, elServicio integer) | ||
+ | |||
+ | BEGIN | ||
+ | declare nroNuevaEncomienda integer; | ||
+ | declare cargaRestanteNueva integer; | ||
+ | |||
+ | select max(nroEncomienda) + 1 from encomienda into nroNuevaEncomienda; | ||
+ | select cargaRestante - elPeso from servicio where nroServicio = elServicio into cargaRestanteNueva; | ||
+ | insert into encomienda(nroEncomienda,cliente,peso,precioAsegurado) values | ||
+ | (nroNuevaEncomienda, elCliente, elPeso, peso*20); | ||
+ | update servicio set cargaRestante = cargaRestante - elPeso where nroServicio = elServicio; | ||
+ | insert into encomiendaEnServicio(nroEncomienda,nroServicio) values | ||
+ | (nroNuevaEncomienda, elServicio); | ||
+ | END | ||
+ | </code> | ||
+ | |||
+ | |||
+ | 2. phantom read. | ||
Line 29: | Line 49: | ||
Demarcación - BEGIN / COMMIT / ROLLBACK. | Demarcación - BEGIN / COMMIT / ROLLBACK. | ||
+ | |||
+ | Intercalado de transacciones - schedule | ||
+ | |||
+ | Serialización - costo de la serialización - necesidad de encontrar buenos equilibrios. | ||
+ | |||
+ | |||
+ | ==Intro a transacciones== |
Revision as of 16:52, 7 November 2008
Contents |
Esquema de BD de ejemplo
encomienda <nroEncomienda, cliente, peso, precioAsegurado>
servicio <nroServicio, origen, destino, partida, llegada, cargaRestante>
encomiendaEnServicio <nroServicio, nroEncomienda>
Intro a concurrencia
BDs monousuario y multiusuario.
Anomalías de concurrencia
1. non-repeatable read y su consecuencia respecto de los UPDATE.
Ponele una transacción que agrega una encomienda para un único servicio
PROCEDURE `cargarEncomienda1`(elCliente varchar(45), elPeso integer, elServicio integer)
BEGIN
declare nroNuevaEncomienda integer; declare cargaRestanteNueva integer;
select max(nroEncomienda) + 1 from encomienda into nroNuevaEncomienda; select cargaRestante - elPeso from servicio where nroServicio = elServicio into cargaRestanteNueva; insert into encomienda(nroEncomienda,cliente,peso,precioAsegurado) values (nroNuevaEncomienda, elCliente, elPeso, peso*20); update servicio set cargaRestante = cargaRestante - elPeso where nroServicio = elServicio; insert into encomiendaEnServicio(nroEncomienda,nroServicio) values (nroNuevaEncomienda, elServicio);
END
2. phantom read.
Intro a transacciones
Idea de transacción de negocios.
Idea de transacción en una BD.
Las 4 características
- Atomicidad: la garantiza el motor.
- Consistencia: la debe garantizar uno haciendo operaciones correctas en cada transacción.
- Durabilidad: la garantiza el motor.
- Aislamiento: necesita un tratamiento particular.
Demarcación - BEGIN / COMMIT / ROLLBACK.
Intercalado de transacciones - schedule
Serialización - costo de la serialización - necesidad de encontrar buenos equilibrios.