我们说我有以下型号:
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)
两个并发请求(r1和r2)正在尝试修改事务中的A实例。 r1想要更新(即.put()
)实例prop_a
并且r2想要同时更新实例prop_b
(即同一实例的不同属性)。这会被视为碰撞吗?
类似地,如果r1和r2想要更新同一A实例的list
属性中的不同元素(例如分别为list[0]
和list[1]
),这将是也被视为@ndb.transactional
答案 0 :(得分:1)
如果它是A类的同一实体,那么两个交易都会发生冲突。
即使它们不是A类的同一实体,两个事务仍然会发生冲突,除非这两个实例属于不同的实体组。
交易的碰撞空间是实体组。事务是否引用不同的属性无关紧要。它们是否修改列表属性的不同元素无关紧要。他们是修改同一实体还是不同实体无关紧要。从碰撞的角度来看,唯一重要的是交易是否属于同一个实体组。