2015-09-05 40 views
2

是否可以在Graph Engine中實現交易?Graph Engine中的交易

我喜歡在不同的單元格上進行多個更新,然後提交或回滾這些更改。

即使有一個細胞也很困難。當我使用下一個代碼時,修改不會寫入磁盤,但內存會改變!

using (Character_Accessor characterAccessor = Global.LocalStorage.UseCharacter(cellId, CellAccessOptions.StrongLogAhead)) 
{ 
    characterAccessor.Name = "Modified"; 
    throw new Exception("Test exception"); 
} 

回答

0

我的理解是:無論你拋出這個異常與否:變化總是隻在內存中 - 直到你顯式調用Global.LocalStorage.SaveStorage()

您可以在開始交易之前通過保存存儲來實現您的交易,然後進行更改,如果您想要回滾,請致電Global.LocalStorage.ResetStorage()

所有這些,當然,只有當您不需要高性能吞吐量並在單個線程上訪問數據庫時。

0

預寫日誌只在「使用」作用域結束時刷新到磁盤 - 當訪問者正在處理並且內存存儲中的鎖將要被釋放時。

這就像一個單細胞的小型交易。當你拿着鎖時,其他人不能訪問這個單元格。您可以對單元格進行多處更改並在最後「提交」它們 - 或者,在使用範圍的開始處製作影子副本,然後在出現任何問題時回滾到此副本(這仍然是手動過程雖然)。

此外,請查看:https://github.com/Microsoft/GraphEngine/tree/multi_cell_lock 我們正致力於啓用一個線程來保存多個鎖。這將使多實體事務更容易實現。