NDB事务冲突

时间:2015-09-04 03:02:51

标签: google-app-engine transactions google-cloud-datastore

我们说我有以下型号:

class B(ndb.Model):
    name   = ndb.StringProperty()

class A(ndb.Model):
    prop_a = ndb.StringProperty()
    prop_b = ndb.StringProperty()
    list   = ndb.StructuredProperty(B, repeated=True)
  1. 两个并发请求(r1和r2)正在尝试修改事务中的A实例。 r1想要更新(即.put())实例prop_a并且r2想要同时更新实例prop_b(即同一实例的不同属性)。这会被视为碰撞吗?

  2. 类似地,如果r1和r2想要更新同一A实例的list属性中的不同元素(例如分别为list[0]list[1]),这将是也被视为@ndb.transactional

  3. 的碰撞

1 个答案:

答案 0 :(得分:1)

如果它是A类的同一实体,那么两个交易都会发生冲突。

即使它们不是A类的同一实体,两个事务仍然会发生冲突,除非这两个实例属于不同的实体组。

交易的碰撞空间是实体组。事务是否引用不同的属性无关紧要。它们是否修改列表属性的不同元素无关紧要。他们是修改同一实体还是不同实体无关紧要。从碰撞的角度来看,唯一重要的是交易是否属于同一个实体组。