Graph Engine中的事务

时间:2015-09-05 13:32:09

标签: graphengine

是否可以在Graph Engine中实现事务?

我喜欢在不同的单元格上进行多次更新,然后提交或回滚这些更改。

即使有一个细胞也很难。当我使用下一个代码时,修改不会写入磁盘,但内存已更改!

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

2 个答案:

答案 0 :(得分:0)

我的理解是:无论您是否抛出此异常:更改始终只在内存中 - 直到您明确调用Global.LocalStorage.SaveStorage()

您可以在启动事务之前保存存储来实现事务,然后进行更改,如果要回滚,只需调用Global.LocalStorage.ResetStorage()即可。

所有这些,当然,只有当您不需要高性能吞吐量并在单个线程上访问数据库时。

答案 1 :(得分:0)

预写日志仅在"使用"结束时刷新到磁盘。 scope - 当处理访问者并且即将释放内存存储器中的锁时。

这就像单个单元格上的迷你交易。当你拿着锁时,其他人无法进入牢房。您可以对单元格进行多项更改,并且" commit"它们最后 - 或者,在使用范围的开头制作阴影副本,然后在出现任何问题时稍后回滚到此副本(尽管这仍然是手动过程)。

另外,请检查一下:https://github.com/Microsoft/GraphEngine/tree/multi_cell_lock 我们正在努力使一个线程能够持有多个锁。这将使多实体事务更容易实现。