持久性:如何让我进入ACID

时间:2013-05-01 17:22:14

标签: haskell persistent yesod

假设我在事务中执行以下步骤:

  • 从数据库中读取一些数据
  • 根据它做一些计算
  • 将一些数据B写入数据库

如果A在平均时间内发生了变化,是否可以使此交易失败?

简而言之:如何在持久化包中实现隔离?

1 个答案:

答案 0 :(得分:4)

我自己没有使用过persistent,但是Yesod book提到了

  

需要注意的一件重要事情是发生在一个内部的一切   单个调用runSqlConn在单个事务中运行。这有两个   重要的含义:

     
      
  • 对于许多数据库,提交事务   可能是一项昂贵的活动。通过将多个步骤合并为一个   交易,你可以大大加快代码。

  •   
  • 如果有例外   在一次调用runSqlConn内的任何地方抛出,所有操作都会   回滚(假设你的后端有回滚支持)。

  •   

这是否为您提供隔离保证可能取决于给定的后端是否为事务提供隔离保证。

相关问题