2010-03-22 21 views

Respuesta

5

La idea de una "transacción" en la memoria transaccional del software se toma prestada explícitamente de las bases de datos. La diferencia es dónde se implementan las transacciones y cómo se usan.

STM es un concepto de nivel de idioma: una secuencia de operaciones no tiene efecto hasta que se compromete una transacción. Normalmente, esto significa que los valores de algunas variables globales/compartidas solo cambian cuando una transacción tiene éxito. La propiedad se ve reforzada por el tiempo de ejecución del idioma. No existe una noción inherente de persistencia: las variables involucradas en una transacción pueden ser de naturaleza puramente dinámica (por ejemplo, el tamaño de una cola de trabajo).

Las transacciones de base de datos son un concepto de nivel de aplicación: una secuencia de operaciones de datos no surten efecto hasta que se compromete la transacción. Como se trata de una base de datos, la persistencia es fundamental: el significado de "surtir efecto" dentro de una base de datos es que los datos se guardan en alguna tienda persistente.

Podría utilizar una base de datos y transacciones de base de datos para implementar un algoritmo de estilo STM, pero perdería la facilidad y conveniencia (y probablemente en la mayoría de los casos el rendimiento) de una implementación de nivel de idioma.

+0

¿Qué quiere decir con una "operación"? ¿Te refieres al código de ejecución? – Zubair

+0

Sí, exactamente. En STM, los efectos del código dentro de la transacción (por ejemplo, asignaciones a variables, E/S) no son visibles hasta que la transacción se "compromete". –

1

STM se utiliza principalmente para concurrencia, mientras que las transacciones de base de datos son sobre la coherencia de datos.

+0

por lo stms no son consistentes? – Zubair

+0

En las bases de datos existen invariantes explícitos que se pueden especificar y mantener, principalmente sobre la preservación de las asignaciones entre campos clave en las tablas. Si tengo las tablas "Cliente" y "Dirección", entonces puedo especificar que cada Dirección debe tener un Cliente que coincida, y la base de datos lo mantendrá. Haskell STM no hace esto. –

+1

@Paul en mi opinión, este tipo de consistencia no es exclusivo de las bases de datos. Siempre puede aplicar un invariante dentro de una transacción STM. –

4

Una transacción de STM tiene mucho en común con una transacción de base de datos. En particular, de las propiedades ACID importantes para los diseñadores de bases de datos, STM proporciona Atomicity and Isolation. La consistencia, sin embargo, depende del programador —, por ejemplo, puede escribir transacciones STM que violen las invariantes de estructuras internas de datos. Finalmente, las transacciones de STM generalmente no son Durables; los resultados se almacenan en RAM volátil, y si la máquina falla después de una transacción exitosa, los resultados se pueden perder. Eso, en mi opinión, es probablemente la diferencia más destacada entre una transacción STM y una transacción de base de datos.

+0

Si puede codificar sus invariantes en el sistema de tipos, entonces no puede escribir de forma incoherente. –

Cuestiones relacionadas