2015-09-04 50 views
1

假設我有一個模型如下。NDB交易衝突

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)來在修改的實例中的事務。 r1想要更新(.put())實例的prop_a,並且r2想要同時更新實例的prop_b。要更新的實例的不同屬性。這會被視爲碰撞嗎?
  2. 相似的,如果r1和r2都想更新實例A的屬性'list'但不同的元素(例如list [0]和list [1])。這是否會被認爲是@ ndb.transactional的碰撞?

回答

0

如果它是A類的同一個實體,那麼兩個事務都會發生衝突。

即使它們不是A類的同一實體,那麼兩個事務仍然會發生衝突,除非這兩個實例屬於不同的實體組。

交易的衝突空間是實體組。交易是否引用不同的屬性並不重要。他們是否修改列表屬性的不同元素並不重要。他們是否修改相同的實體或不同的實體並不重要。從衝突的角度來看唯一重要的是事務是否屬於同一個實體組。