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