Concurrencia y transacciones - script 2008

From Ibbddunq

(Difference between revisions)
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'''
-
* non-repeatable read y su consecuencia respecto de los UPDATE.
+
 
-
* 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.


Intro a transacciones

Personal tools