Ir al contenido

Diferencia entre revisiones de «Transacción (informática)»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
m Revertidos los cambios de 148.208.220.2 a la última edición de Diegusjaimes usando monobook-suite
Línea 1: Línea 1:
{{fusionar|Transacción (informática)}}
{{fusionar|Transacción (base de datos)}}
Una '''transacción''' es una interacción con una [[estructura de datos]] compleja, compuesta por varios procesos que se han de aplicar uno después del otro. La transacción debe ser equivalente a una [[interacción]] ''atómica''. Es decir, que se realice de una sola vez y que la estructura a medio manipular no sea jamás alcanzable por el resto del sistema hasta que haya finalizado todos sus procesos.
Una '''transacción''' en un [[SGBD|Sistema de Gestión de Bases de Datos (SGBD)]], es un conjunto de órdenes que se ejecutan formando una unidad de trabajo, es decir, en forma indivisible o atómica.


== Ejemplo ==
Un [[SGBD]] se dice '''transaccional''', si es capaz de mantener la integridad de los datos, haciendo que estas transacciones no puedan finalizar en un estado intermedio. Cuando por alguna causa el sistema debe cancelar la transacción, empieza a deshacer las órdenes ejecutadas hasta dejar la base de datos en su estado inicial (llamado punto de integridad), como si la orden de la transacción nunca se hubiese realizado.


La transferencia de [[Fondo común de inversión|fondos]] entre dos cuentas corrientes de un [[banco]]. Si queremos transferir, supongamos 5000€ de la [[cuenta corriente]] de ''A'' y ''B'' y las cuentas tienen, respectivamente, 20000€ y 0€ de saldo los pasos lógicos serían:
Para esto, el lenguaje de consulta de datos [[SQL]] (''Structured Query Language''), provee los mecanismos para especificar que un conjunto de acciones deben constituir una transacción.


#Comprobar si en la cuenta ''A'' hay dinero suficiente.
* BEGIN TRAN: Especifica que va a empezar una transacción.
#Restar 5000€ de la cuenta de ''A'', con lo que su saldo pasa a ser de 15000€.
* COMMIT TRAN: Le indica al motor que puede considerar la transacción completada con éxito.
#Sumar 5000€ a la cuenta de ''B'', con lo que los saldos quedan ''A''= 15000€ y ''B''= 5000€
* ROLLBACK TRAN: Indica que se ha alcanzado un fallo y que debe restablecer la base al punto de integridad.


Ahora bien, si entre el paso 2 y el 3 el sistema sufre una parada o [[error]] inesperado las cuentas quedarían como ''A''= 15000 y ''B''= 0 con lo cual se han volatilizado 5000€ y presumiblemente ni ''A'' ni ''B'' estarán contentos, y hubiesen preferido que la transacción nunca hubiese sido iniciada.
En un sistema ideal, las transacciones deberían garantizar todas las propiedades [[ACID]]; en la práctica, a veces alguna de estas propiedades se simplifica o debilita con vistas a obtener un mejor rendimiento.


Este ejemplo ilustra por qué las transacciones tienen un comportamiento deseado de ''Todo o nada'', o se realiza completamente o no debe tener ningún efecto.
==Un ejemplo de transacción==
1111


== Propiedades ==
Un ejemplo habitual de transacción es el traspaso de una cantidad de dinero entre cuentas bancarias. Normalmente se realiza mediante dos operaciones distintas, una en la que se decrementa el saldo de la cuenta origen y otra en la que incrementamos el saldo de la cuenta destino. Para garantizar la consistencia del sistema (es decir, para que no aparezca o desaparezca dinero), las dos operaciones deben ser atómicas, es decir, el sistema debe garantizar que, bajo cualquier circunstancia (incluso una caída del sistema), el resultado final es que, o bien se han realizado las dos operaciones, o bien no se ha realizado ninguna.

Toda ''transacción'' debe cumplir cuatro propiedades [[ACID]]:

#[[Atomicidad]] ('''A'''tomicity): es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
#[[Consistencia]] ('''C'''onsistency): es la propiedad que asegura que sólo se empieza aquello que se puede acabar. Por lo tanto, se ejecutan aquellas operaciones que no van a romper la reglas y directrices de integridad de la base de datos.
#[[Aislamiento]] ('''I'''solation): es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información nunca generará ningún tipo de error.
#[[Datos persistentes|Permanencia]] ('''D'''urability): es la propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema.

La atomicidad frente a fallos se suele implementar con mecanismos de [[Journaling|journaling]], y la protección frente a accesos concurrentes mediante [[Bloqueos|bloqueos]] en las estructuras afectadas. La serialibilidad viene garantizada por la atomicidad. La permanencia se suele implementar forzando a los periféricos encargados de almacenar los cambios a confirmar la completa y definitiva transmisión de los datos al medio (generalmente, el disco).

La forma [[algoritmo|algorítmica]] que suelen tener las transacciones es la siguiente:

iniciar transacción (lista de recursos a bloquear)
ejecución de las operaciones individuales.
if (todo_ok){
''aplicar_cambios''
}
else{
''cancelar_cambios''
}

En cualquier momento, el programa podría decidir que es necesario hacer ''fallar'' la transacción, con lo que el sistema deberá revertir todos los cambios hechos por las operaciones ya hechas. En el lenguaje [[SQL]] se denomina ''COMMIT'' a ''aplicar_cambios'' y ''ROLLBACK'' a ''cancelar_cambios''.

Las transacciones suelen verse implementadas en sistemas de [[Base de datos|bases de datos]] y, más recientemente, se han visto incorporadas a como gestiona un [[sistema operativo]] la interacción con un [[sistema de archivos]] (como varias características de las bases de datos, debido a que son muy similares arquitectónicamente).

== Véase también ==

*[[ACID]]
*[[Gestor transaccional]]

== Enlaces externos ==

*[http://c2.com/cgi/wiki?TransactionProcessing Transacción]


[[Categoría:Bases de datos]]
[[Categoría:Bases de datos]]

[[cs:Databázová transakce]]
[[da:Databasetransaktion]]
[[de:Transaktion (Informatik)]]
[[en:Database transaction]]
[[eu:Transakzio (informatika)]]
[[fa:تراکنش]]
[[fr:Transaction (base de données)]]
[[he:תנועה (מערכות מידע)]]
[[it:Transazione (database)]]
[[ja:トランザクション]]
[[ko:데이터베이스 트랜잭션]]
[[lt:Transakcija]]
[[nl:Transactie (dataopslag)]]
[[pl:Transakcja (informatyka)]]
[[pt:Transação em base de dados]]
[[ru:Транзакция]]
[[simple:Database transaction]]
[[sr:Трансакција]]
[[ta:தரவுத்தள பரிவர்த்தனை]]
[[vi:Giao dịch cơ sở dữ liệu]]

Revisión del 21:15 3 mar 2010

Una transacción es una interacción con una estructura de datos compleja, compuesta por varios procesos que se han de aplicar uno después del otro. La transacción debe ser equivalente a una interacción atómica. Es decir, que se realice de una sola vez y que la estructura a medio manipular no sea jamás alcanzable por el resto del sistema hasta que haya finalizado todos sus procesos.

Ejemplo

La transferencia de fondos entre dos cuentas corrientes de un banco. Si queremos transferir, supongamos 5000€ de la cuenta corriente de A y B y las cuentas tienen, respectivamente, 20000€ y 0€ de saldo los pasos lógicos serían:

  1. Comprobar si en la cuenta A hay dinero suficiente.
  2. Restar 5000€ de la cuenta de A, con lo que su saldo pasa a ser de 15000€.
  3. Sumar 5000€ a la cuenta de B, con lo que los saldos quedan A= 15000€ y B= 5000€

Ahora bien, si entre el paso 2 y el 3 el sistema sufre una parada o error inesperado las cuentas quedarían como A= 15000 y B= 0 con lo cual se han volatilizado 5000€ y presumiblemente ni A ni B estarán contentos, y hubiesen preferido que la transacción nunca hubiese sido iniciada.

Este ejemplo ilustra por qué las transacciones tienen un comportamiento deseado de Todo o nada, o se realiza completamente o no debe tener ningún efecto. 1111

Propiedades

Toda transacción debe cumplir cuatro propiedades ACID:

  1. Atomicidad (Atomicity): es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
  2. Consistencia (Consistency): es la propiedad que asegura que sólo se empieza aquello que se puede acabar. Por lo tanto, se ejecutan aquellas operaciones que no van a romper la reglas y directrices de integridad de la base de datos.
  3. Aislamiento (Isolation): es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información nunca generará ningún tipo de error.
  4. Permanencia (Durability): es la propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema.

La atomicidad frente a fallos se suele implementar con mecanismos de journaling, y la protección frente a accesos concurrentes mediante bloqueos en las estructuras afectadas. La serialibilidad viene garantizada por la atomicidad. La permanencia se suele implementar forzando a los periféricos encargados de almacenar los cambios a confirmar la completa y definitiva transmisión de los datos al medio (generalmente, el disco).

La forma algorítmica que suelen tener las transacciones es la siguiente:

iniciar transacción (lista de recursos a bloquear)
ejecución de las operaciones individuales.
if (todo_ok){
 aplicar_cambios
}
else{
 cancelar_cambios
}

En cualquier momento, el programa podría decidir que es necesario hacer fallar la transacción, con lo que el sistema deberá revertir todos los cambios hechos por las operaciones ya hechas. En el lenguaje SQL se denomina COMMIT a aplicar_cambios y ROLLBACK a cancelar_cambios.

Las transacciones suelen verse implementadas en sistemas de bases de datos y, más recientemente, se han visto incorporadas a como gestiona un sistema operativo la interacción con un sistema de archivos (como varias características de las bases de datos, debido a que son muy similares arquitectónicamente).

Véase también

Enlaces externos