【发布时间】:2010-03-22 20:54:43
【问题描述】:
我已经阅读了很多关于软件事务内存的内容,尤其是与 Haskell 相关的内容,但我试图弄清楚它与数据库事务有何不同? STM有什么我不理解的优点吗?
【问题讨论】:
标签: database haskell concurrency transactional-memory
我已经阅读了很多关于软件事务内存的内容,尤其是与 Haskell 相关的内容,但我试图弄清楚它与数据库事务有何不同? STM有什么我不理解的优点吗?
【问题讨论】:
标签: database haskell concurrency transactional-memory
软件事务内存中的“事务”概念是从数据库中明确借用的。不同之处在于交易的实施地点和使用方式。
STM 是一个语言级别的概念:一系列操作在事务提交之前不会生效。通常这意味着某些全局/共享变量的值仅在事务成功时才会更改。该属性由语言运行时强制执行。没有固有的持久性概念:事务中涉及的变量本质上可能是纯动态的(例如,工作队列的大小)。
数据库事务是一个应用程序级的概念:一系列数据操作在事务提交之前不会生效。因为这是一个数据库,所以持久化是基础:在数据库内部“生效”的意思是数据保存在某个持久化存储中。
您可能会使用数据库和数据库事务来实现 STM 风格的算法,但您会失去语言级实现的易用性和便利性(在大多数情况下可能还会失去性能)。
【讨论】:
STM 事务与数据库事务有很多共同点。特别是,在对数据库设计者很重要的 ACID 属性中,STM 提供了原子性和隔离性。然而,一致性取决于程序员——例如,您可以编写违反内部数据结构不变量的 STM 事务。最后,STM 事务通常不是持久的;结果存储在易失性 RAM 中,如果机器在成功交易后崩溃,结果可能会丢失。在我看来,这可能是 STM 事务和数据库事务之间最显着的区别。
【讨论】:
STM主要用于并发,而数据库事务则是关于数据一致性的。
【讨论】: