Aïllament (ACID)
En bases de senyes, el aïllament és una propietat que definix cóm i quàn els canvis produïts per una operació es fan visibles per a les demés operacions concurrents. Aïllament és una de les 4 propietats ACID (Atomicidad, Consistència, Aïllament, Durabilitat) aplicables a una base de senyes transaccional.
Nivells d'aïllament
[editar | editar còdic]De les quatre propietats ACID d'un Sistema de gestió de bases de senyes relacionals (SGBDR) la d'aïllament és la que més freqüentment es relaixa. Per a obtindre el major nivell d'aïllament, un SGBDR generalment fa un bloqueig de les senyes o implementa un Control de concurrència per mig de versions múltiples (MVCC), lo que pot resultar en una pèrdua de concurrència. Per això es necessita afegir llògica adicional al programa que accedix a les senyes per al seu funcionament correcte.
La major part dels SGBDR oferixen uns certs nivells d'aïllament que controlen el grau de bloqueig durant l'accés a les senyes. Per a la major part d'aplicacions, l'accés a les senyes es pot realisar de modo que s'eviten alts nivells d'aïllament (i.i. nivell SERIALIZABLE), reduint aixina la sobrecàrrega deguda a la necessitat de bloquejos pel sistema. El programador deu analisar detenidamente el còdic que accedix a la base de senyes per a assegurar-se de que el descens del nivell d'aïllament que oferix el SGBD no produïx errors en el programa. Recíprocament, si s'usen alts nivells d'aïllament la possibilitat de bloqueig aumenta, lo que també requerix anàlisis cuidadós del còdic.
Els nivells d'aïllament estan definits per ANSI/ISO SQL, i es llisten a continuació.
Serialisable
[editar | editar còdic]Este és el nivell d'aïllament més alt. Especifica que totes les transaccions ocórreguen de modo aïllat, o dit d'un atre modo, com si totes les transaccions s'eixecutaren de modo serie (una despuix d'una atra). La sensació d'eixecució simultànea de dos o més transaccions que perceben els usuaris seria una ilusió produïda per el SGBD.
Si el SGBDR fa una implementació basada en bloqueigs, la serialización requerix que els blocs de llectura i escritura es lliberen al final de la transacció. De la mateixa manera deuen realisar-se bloquejos de ranc -sobre les senyes seleccionades en SELECT usant WHERE- per a evitar l'efecte de les llectures fantasma (vore més avall).
Quan es fa una implementació no basada en bloquejos, si el SGBDR detecta una colisió d'escritura entre transaccions solament a una d'elles se li autorisa cometre.
Llectures repetibles (Repeatable reads)
[editar | editar còdic]En este nivell d'aïllament, un SGBDR que implemente el control de concurrència basat en bloquejos manté els bloquejos de llectura i escritura -de les senyes seleccionades- fins al final de la transacció. No obstant, no es gestionen els bloquejos de ranc, per lo que les llectures fantasma poden ocórrer (vore més avall).
Llectures compromeses (Read committed)
[editar | editar còdic]En este nivell d'aïllament, un SGBDR que implemente el control de concurrència basat en bloquejos manté els bloquejos d'escritura -de les senyes seleccionades- fins al final de la transacció, mentres que els bloquejos de llectura es cancelen tan pronte com acaba l'operació de SELECT (per lo que l'efecte de les llectures no repetibles pot ocórrer, com s'explica més avall). A l'igual ocorria en el nivell anterior, no es gestionen els bloquejos de ranc.
Llectures no compromeses (Read uncommitted)
[editar | editar còdic]Este és el menor nivell d'aïllament. En ell es permeten les llectures brutes (vore més avall), per lo que una transacció pot vore canvis no comesos encara per una atra transacció.
Nivell d'aïllament per defecte
[editar | editar còdic]El nivell d'aïllament per defecte de distints SGBDR varia àmpliament. La majoria de bases de senyes que gestionen transaccions permeten a l'usuari establir qualsevol nivell d'aïllament. Alguns SGBDR requerixen sintaxis especial quan es realisa una operació SELECT que efectua bloquejos (i.g. SELECT ... FOR UPDATE per a bloquejar per a escritura aquelles files accedides).
No obstant, la definició anterior ha segut criticada en l'artícul A Critique of ANSI SQL Isolation Levels per ambigua, i per no reflectir de modo precís l'aïllament proporcionat per moltes bases de senyes:
- L'artícul mostra les debilitats en la definició de nivells d'aïllament. Els tres efectes ANSI són ambigus. Inclús la seua interpretació més àmplia no exclou el comportament anormal. Açò du a resultats no intuïtius. En concret, els nivells d'aïllament basats en bloquejos tenen distintes característiques que els seus equivalents ANSI. Açò desconcerta ya que els sistemes comercials típicament usen bloquejos. Ademés, els efectes ANSI no distinguixen entre els múltiples nivells d'aïllament dels sistemes comercials.
Hi ha també atres crítiques sobre les definicions d'aïllament SQL de ANSI, sobre que incita als implementadores a realisar "treballs bruts":
- ... es basa de manera subrepticia en que s'usa un esquema de bloqueig per a control de concurrència, de modo opost a un sistema de concurrència optimista o de versió múltiple (MVCC). Açò implica que la semàntica proposta està mal definida.
Referències
[editar | editar còdic]- Este artícul conté una traducció derivada de «Aislamiento (ACID)» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.