He leído mucho sobre Software Transactional Memory, especialmente en relación con Haskell, pero estoy tratando de entender cómo es diferente de las transacciones de bases de datos. ¿Hay algunas ventajas que no entiendo con STM?¿La memoria transaccional de software es la misma que las transacciones de base de datos?
Respuesta
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.
STM se utiliza principalmente para concurrencia, mientras que las transacciones de base de datos son sobre la coherencia de datos.
por lo stms no son consistentes? – Zubair
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. –
@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. –
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.
Si puede codificar sus invariantes en el sistema de tipos, entonces no puede escribir de forma incoherente. –
- 1. ¿Qué es la memoria transaccional?
- 2. ¿Alguna experiencia real usando la memoria transaccional de software?
- 3. ¿Pueden las diferentes conexiones de la misma base de datos sqlite comenzar transacciones al mismo tiempo?
- 4. Cómo decidir utilizar las transacciones de la base de datos
- 5. ACID y transacciones de base de datos?
- 6. ¿Tiene C# una manera de imitar la memoria transaccional de software, en una escala pequeña?
- 7. ¿Es posible que las transacciones de una base de datos abarquen varias solicitudes en los rieles?
- 8. Diseño de la base de datos: tabla de transacciones contables
- 9. ¿Cómo implementan las transacciones los proveedores de base de datos?
- 10. Transacciones en la base de datos de wordpress
- 11. Transacciones de aplicaciones que no son de base de datos
- 12. La base de datos nosql es buena para la gestión de transacciones en línea Money
- 13. ¿Cómo encontrar las tablas que ocupan la memoria máxima en la base de datos?
- 14. Dos propietarios de la misma base de datos PostgreSQL
- 15. Comprensión de las transacciones de Spring: ¿qué sucede cuando un método transaccional llama a otro método transaccional?
- 16. ¿Alguien ha intentado la memoria transaccional para C++?
- 17. Magento atrapando excepciones y volviendo atrás las transacciones de la base de datos
- 18. C++ La clase no es la base de sí misma
- 19. Django: ¿dos proyectos usando la misma base de datos?
- 20. ¿Es esencial cerrar la base de datos?
- 21. Node.js postgres + gestión de transacciones de base de datos
- 22. ¿Existe un marco que funcione de la misma manera que actualizar una base de datos de definición de virus?
- 23. Alternativa al TimesTen en la base de datos de memoria
- 24. ¿Maneras de manejar grandes transacciones en cualquier base de datos?
- 25. En el motor de la aplicación de Google, ¿cómo implemento las transacciones de la base de datos?
- 26. ¿Alguna base de datos permite que se creen simultáneamente varios índices en la misma tabla?
- 27. PostgreSQL en la base de datos de memoria
- 28. Raíles con en la base de datos de memoria
- 29. En la base de datos de memoria que admite la consulta espacial
- 30. Utilizando STM y transacciones de base de datos juntas
¿Qué quiere decir con una "operación"? ¿Te refieres al código de ejecución? – Zubair
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". –