【问题标题】:persistent: How do I get the I in ACID持久性:如何在 ACID 中获得 I
【发布时间】:2013-04-25 17:48:51
【问题描述】:

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

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

如果A同时发生变化,是否有可能使这个事务失败?

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

【问题讨论】:

    标签: haskell persistent yesod


    【解决方案1】:

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

    需要注意的重要一点是,发生在 对runSqlConn 的单个调用在单个事务中运行。这有两个 重要意义:

    • 对于许多数据库,提交事务 可能是一项昂贵的活动。通过将多个步骤放在一个 事务,您可以显着加快代码速度。

    • 如果出现异常 在对runSqlConn 的一次调用中抛出任何地方,所有操作都会 回滚(假设您的后端支持回滚)。

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

    【讨论】:

    • 你知道有没有办法从持久化配置后端?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2019-05-25
    相关资源
    最近更新 更多