2016-11-11 55 views
0

在境界,如果事務A和B都爲運行:境界MVCC行爲

以第一項「第一」 =>做一些長時間運行的操作=>刪除「第一」

請問:

  • 交易A和B獲得「First」的相同值?
  • 交易,如果它運行的塊事務B「第一「?

我希望一個塊B的全部,因爲它‘寫’,則B的運行,並得到了不同的價值‘第一’,但它看起來像鎖定比這更細粒度和B將不會被阻止,直到它到達刪除語句。

這是否意味着他們將運行與他們的單獨的數據庫副本,都獲得「First」的值相同,並且彼此並排運行,那麼B會拋出,因爲它試圖刪除A後已經刪除的「First」?

回答

0

交易互相阻斷。兩個Realm實例不能同時處於「寫入」模式。如果事務正在進行,則另一個線程的Realm實例將被阻止,並且被迫等待另一個事務完成。這就是爲什麼UI線程領域交易不鼓勵的原因。

在寫模式期間,Realm始終會看到「實時最新數據」,這意味着即使在修改數據庫時,RealmResults下面也會實時更新。 (事實上​​,這不會發生在Java綁定中是一種「黑客」)。

事務處理A事務處理B如果它首先運行?

這贏了。