Transacciones y concurrencia. Sistemas de persistencia de objetos

Transacciones y concurrencia Sistemas de persistencia de objetos Transacción ACID   Es la demarcación de una unidad de trabajo JPA permite traba

42 downloads 108 Views 254KB Size

Recommend Stories


Persistencia Orientada a objetos
Persistencia Orientada a objetos Prof. Mg. Javier Bazzocco 2011 1 Bazzocco, Javier Persistencia orientada a objetos. - 1a ed. - La Plata : Universi

Concurrencia y Recuperabilidad
Concurrencia y Recuperabilidad Paradigma Pesimista Lic. Gerardo Rossel 2016 Serializabilidad Recuperabilidad Recuperabilidad Control de Concurr

Story Transcript

Transacciones y concurrencia Sistemas de persistencia de objetos

Transacción ACID 



Es la demarcación de una unidad de trabajo JPA permite trabajar con varios API de transacciones   

nov-08

JSE JDBC JTA Declarativas (EJB) Alberto M.F.A. [email protected]

2

Control de transacciones

nov-08

Alberto M.F.A. [email protected]

3

Excepciones JPA Todas las excepciones JPA son fatales y dejan el contexto de persistencia inutilizado Todas las excepciones lanzadas por EntityManager provocan rollback() Todas las de Query tb, excepto NoResultException y NonUniqueResultException. Todas NO chequeadas

nov-08

Alberto M.F.A. [email protected]

4

Control de concurrencia 



Las trx ACID crean la ilusión de que cada usuario es único en la base de datos  aíslan a unos de otros El aislamiento tradicionalmente se consigue con bloqueos a nivel de fila, de rangos o de tabla: 

De lectura (compartido) 



De escritura (exclusivo) 



todos podemos leer pero nadie escribir nadie puede leer porque voy a escribir y nadie más puede escribir

Oracle y PostgreSQL usan MVCC

nov-08

Alberto M.F.A. [email protected]

5

Problemas debidos a concurrencia   

Actualización perdida (lost update) Lectura sucia (dirty read) Lectura no repetible (non repetible read) 



Doble actualización (second lost update)

Lectura fantasma

nov-08

(phantom read)

Alberto M.F.A. [email protected]

6

Problemas debidos a concurrencia (2)

Lost update: Dos trx sin

Dirty read: TrxA lee datos

bloqueo actualizan los mismos datos. La trxB hace rollback y se pierden los datos de trxA

que luego desaparecen por rollback

nov-08

Alberto M.F.A. [email protected]

7

Problemas debidos a concurrencia (3)

Unrepeatable read:

Second lost update: Caso

Durante txA txB es más especial de unrepeatable read. La actualización de rápida y modifica datos que vuelve a necesitar txA txB es sobreecrita por la de txA.

nov-08

Phantom read: Durante txA txB inserta (o modifica) nuevos datos que txA va a detectar más tarde repitiendo la consulta (u otra que depende de ellos)

Alberto M.F.A. [email protected]

8

Niveles de aislamiento ANSI 

Read uncommitted 



Read commited 



Protege de dirty read  B.E. en UPDATE

Repetible read 



Tiene todos los problemas, solo protege frente a sobreescrituras (lost update)  B.L. en UPDATE

Protege de dirty y non repetible read  B.L. en SELECT, B.E. en UPDATE

Serializable   

nov-08

Protege de phantom, dirty y non repetible read B.L. SELECT en tablas o rangos B.E. UPDATE en tablas o rangos Alberto M.F.A. [email protected]

9

Ajuste del nivel de aislamiento 

Se si pone mal problemas: 

Solo se van a notar cuando el sistema está en carga 





nov-08

Cuando ya estamos en producción

Si se pone nivel muy restricitivo se ralentiza mucho el acceso Si se pone muy bajo aparecerán datos inconsistentes difíciles de depurar Alberto M.F.A. [email protected]

10

¿Cuál escoger? 

Depende de necesidades, pero:  

Read uncommitted nunca (solo expertos) Serializable no es frecuente 



¿Realmente me van a afectar los phantom reads?  pocas trx son así

La duda mayor está entre read committed y

repeatable read 



Read commited no protege del second lost update y sí puede ser importante Repetible read sí protege frente a second lost update 

nov-08

Pero no lo tienen todas las BDD (oracle no lo tiene, PostgreSQL tampoco, …) Alberto M.F.A. [email protected]

11

Read commited puede servir… 



Casi todas las BDD tienen read committed por defecto Con bloqueos pesimistas se consigue

repetible read 

Con control optimista se puede evitar el

second lost update 

nov-08

Con tener la BDD en read commited por defecto sirve para el 90% si se añaden estos controles a la aplicación Alberto M.F.A. [email protected]

12

Ajuste del nivel en Hibernate



Hibernate nativo usa por defecto el nivel de la conexión JDBC  

JDBC a su vez usa el nivel por defecto en la BDD Depende de la BDD, hay que consultar la documentación 





suele ser read commited o repetible read

Con el ajuste se cambia para ¡todas las transacciones ! Ajuste en persistence.xml

nov-08

Alberto M.F.A. [email protected]

13

Control pesimista y optimista ROLLBACK

Lock

Lock

v1.0

Lock

ROLLBACK PESIMISTA

nov-08

v1.0

v2.0

En BDD ya no es v1.0 OPTIMISTA

Alberto M.F.A. [email protected]

14

Control optimista 



Diferencia entre trx de sistema y trx de aplicación El control optimista además permite detectar cambios en actualizaciones entre trx de sistema La solución optimista es ersión a los añadir versión objetos

nov-08

Alberto M.F.A. [email protected]

15

Versionado de objetos con campo versión 

Añadir información al objeto para poder detectar cambios entre el estado detached y persistent  

nov-08

Campo versión (un entero) Timestamp (de la última modificación)

Alberto M.F.A. [email protected]

16

Tipos válidos para versionado

Mapeado de campos !

Sin get/set

JPA gestiona los campos versión de forma automática

nov-08

Alberto M.F.A. [email protected]

17

¿Qué provoca cambio de versión? 

No estándar JPA 

Hibernate:   

Cualquier cambio en un campo de la entidad Cambios en campos de Value Types Cambios en associaciones @…ToMany (colecciones de entidades) 



nov-08

Añadir o quitar elementos a la colección

No provoca cambios modificar entidades asociadas Alberto M.F.A. [email protected]

18

Versionado sin campo versión 

Solo válido para objetos que se hayan cargado en la misma sesión

NO es JPA estándar nov-08

Alberto M.F.A. [email protected]

19

Control pesimista 



En circunstancias normales el contexto de persistencia da protección repetible read al haber una única copia en memoria (aunque la BDD no esté en ese nivel) Pero en algunas ocasiones esta protección no se consigue En este entretiempo otra trx puede haber cambiado la descripción

Se proyectan escalares, no objetos: no hay chaché de contexto nov-08

Alberto M.F.A. [email protected]

20

Se impone un bloqueo en la fila

Control pesimista 

El control pesimista sube el nivel a repetible read sin cambiar BDD

Impone un bloqueo de fila

nov-08

Alberto M.F.A. [email protected]

21

Modos de bloqueo 



LockModeType.READ  Impone bloqueo de lectura  SELECT * FROM … FOR UPDATE de Oracle (o equivalente) LockModeType.WRITE  Lo mismo que el anterior pero fuerza el incremento de versión

Fuerza cambio de versión que no se produciría

nov-08

Alberto M.F.A. [email protected]

22

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.