Zub*_*air 6 database concurrency haskell transactional-memory
我已经阅读了很多关于软件事务内存的信息,特别是与Haskell有关但是我试图弄清楚它与数据库事务的区别?STM是否有一些我不理解的优点?
软件事务存储器中"事务"的概念明确地从数据库中借用.不同之处在于交易的实施方式以及交易方式.
STM是一种语言级概念:在提交事务之前,一系列操作不会生效.通常,这意味着某些全局/共享变量的值仅在事务成功时更改.该属性由语言运行时强制执行.持久性没有固有的概念:事务中涉及的变量本质上可能纯粹是动态的(例如,工作队列的大小).
数据库事务是应用程序级概念:在提交事务之前,一系列数据操作不会生效.由于这是一个数据库,持久性是基本的:数据库内部"生效"的含义是数据保存在某个持久性存储中.
您可能使用数据库和数据库事务来实现STM样式的算法,但是您将失去语言级实现的简便性(并且在大多数情况下可能是性能).
STM 事务与数据库事务有很多共同点。特别是,对于数据库设计者来说很重要的 ACID 属性中,STM 提供了原子性和隔离性。然而,一致性取决于程序员,例如,您可以编写违反内部数据结构不变量的 STM 事务。最后,STM 事务通常不是持久的;结果存储在易失性RAM中,如果机器在成功交易后崩溃,结果可能会丢失。在我看来,这可能是 STM 事务和数据库事务之间最显着的区别。