代码之家  ›  专栏  ›  技术社区  ›  yazz.com

软件事务性内存是否与数据库事务相同?

  •  6
  • yazz.com  · 技术社区  · 14 年前

    我读过很多关于软件事务性内存的文章,特别是关于Haskell的文章,但是我想知道它与数据库事务有什么不同?我不明白STM有什么好处吗?

    3 回复  |  直到 13 年前
        1
  •  5
  •   Charles Duffy    14 年前

    软件事务性内存中的“事务”概念是从数据库中显式借用的。不同之处在于事务在何处实现以及如何使用它们。

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

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

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

        2
  •  4
  •   Norman Ramsey    14 年前

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

        3
  •  1
  •   user38123    14 年前

    STM主要用于并发性,而数据库事务是关于数据一致性的。