2013-05-01 22 views
10

假設我做在一個事務以下步驟:執着:我如何得到我的ACID

  • 從數據庫
  • 讀取一些數據的不基於它的一些計算
  • 向數據庫寫入一些數據B

如果A同時發生更改,是否有可能使此事務失敗?

簡而言之:如何在持久包中實現隔離?

回答

4

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

一個重要的事情是發生在單個事務中 單一呼叫runSqlConn運行裏面的一切。這有兩個 重要的含義:

  • 對於許多數據庫,提交事務 可以是一個昂貴的活動。通過將多個步驟放入一個單一的 事務中,您可以大幅提高代碼速度。

  • 如果一個例外是 單個呼叫內的任何地方拋向runSqlConn,所有行動將 回滾(假設你的後端有回滾支持)。

這是否爲您提供了隔離性保證可能依賴於給定的後端是否給出了隔離性保證了交易。

+0

你知道是否有辦法從持久性配置後端? – 2013-05-02 16:39:01