2013-05-01 18 views
10

假设我做在一个事务以下步骤:执着:我如何得到我的ACID

  • 从数据库
  • 读取一些数据的不基于它的一些计算
  • 向数据库写入一些数据B

如果A同时发生更改,是否有可能使此事务失败?

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

回答

4

我没有用persistent自己,但Yesod book提到要注意

一个重要的事情是发生在单个事务中 单一呼叫runSqlConn运行里面的一切。这有两个 重要的含义:

  • 对于许多数据库,提交事务 可以是一个昂贵的活动。通过将多个步骤放入一个单一的 事务中,您可以大幅提高代码速度。

  • 如果一个例外是 单个呼叫内的任何地方抛向runSqlConn,所有行动将 回滚(假设你的后端有回滚支持)。

这是否为您提供了隔离性保证可能依赖于给定的后端是否给出了隔离性保证了交易。

+0

你知道是否有办法从持久性配置后端? – 2013-05-02 16:39:01