6

我已经阅读了很多关于软件事务内存的内容,尤其是与 Haskell 相关的内容,但我试图弄清楚它与数据库事务有何不同?STM有一些我不了解的优点吗?

4

3 回答 3

5

软件事务内存中“事务”的概念是从数据库中明确借用的。不同之处在于交易的实施地点和使用方式。

STM 是一个语言级别的概念:在事务提交之前,一系列操作不会生效。通常这意味着某些全局/共享变量的值仅在事务成功时才会更改。该属性由语言运行时强制执行。没有固有的持久性概念:事务中涉及的变量本质上可能是纯动态的(例如,工作队列的大小)。

数据库事务是一个应用程序级的概念:一系列数据操作在事务提交之前不会生效。由于这是一个数据库,持久性是基础:在数据库内部“生效”的含义是数据保存在某个持久性存储中。

您可能会使用数据库和数据库事务来实现 STM 风格的算法,但您会失去语言级实现的易用性和便利性(在大多数情况下可能还会失去性能)。

于 2010-03-23T00:02:59.653 回答
4

STM 事务与数据库事务有很多共同点。特别是,在对数据库设计者很重要的 ACID 属性中,STM 提供了原子性和隔离性。然而,一致性取决于程序员——例如,您可以编写违反内部数据结构不变量的 STM 事务。最后,STM 事务通常不是持久的;结果存储在易失性 RAM 中,如果机器在成功交易后崩溃,结果可能会丢失。在我看来,这可能是 STM 事务和数据库事务之间最显着的区别。

于 2010-03-23T04:05:03.270 回答
1

STM 多用于并发,而数据库事务则主要用于数据一致性。

于 2010-03-22T21:04:59.873 回答