Apache使用map参数点燃spring数据保存方法的事务行为

时间:2018-07-11 06:06:35

标签: ignite

根据Apache ignite春季数据文档,有两种方法将数据保存在ignite缓存中:

1. org.apache.ignite.springdata.repository.IgniteRepository.save(key, vlaue)

2. org.apache.ignite.springdata.repository.IgniteRepository.save(Map<ID, S> entities)

所以,我只想了解第二种方法的事务行为。假设我们将使用save(Map<Id,S>)方法保存100条记录,由于某种原因,在70条记录之后,某些节点将关闭。在这种情况下,它会回滚所有70条记录吗?

注意:按照第一种方法的行为,如果我们在方法级别使用@Transaction,则它将回滚特定实体。

1 个答案:

答案 0 :(得分:2)

首先,您应该了解Apache Ignite中使用的事务处理机制。此处介绍的文章对此进行了很好的描述:

https://apacheignite.readme.io/v1.0/docs/transactions#section-two-phase-commit-2pc

对您而言最有趣的部分是“备份节点故障”和“主节点故障”:

备份节点故障

如果备份节点在“准备”阶段或“提交”阶段失败,则不需要特殊处理。数据仍将提交到活动的节点上。然后,GridGain将在后台指定一个新的备份节点,并且数据将被复制到事务范围之外。

主节点故障

如果主节点在“准备”阶段之前或期间发生故障,则协调器将指定一个备份节点成为主节点,然后重试“准备”阶段。如果故障发生在“提交”阶段之前或期间,则备用节点将检测到崩溃并向协调器节点发送消息,以查找是提交还是回滚。事务仍然完成,并且分布式缓存中的数据保持一致。

对于您而言,映射中所有值的所有更新应在一次事务中完成或回滚。我想这些文章回答了您的问题。