并发写入数据存储区中的数据不一致

时间:2016-01-17 09:10:49

标签: google-app-engine app-engine-ndb google-cloud-datastore google-app-engine-python

我正在使用Twitter等社交网络应用程序,人们互相关注。这是我的用户和友谊模式。

class User(ndb.Model):
    followers_count = ndb.IntegerProperty(default=0, indexed=True)
    following_count = ndb.IntegerProperty(default=0, indexed=False)
    created_time = ndb.DateTimeProperty(auto_now_add=True)

class Friendship(ndb.Model):
    user = ndb.KeyProperty(kind=User)
    follower = ndb.KeyProperty(kind=User)
    created_time = ndb.DateTimeProperty(auto_now_add=True)

我面临的问题是,当用户在入职期间同时跟踪20个人时,用户的计数错误。当它应该是20时,它是5或6或7。

以下是以下代码,

user = user_key.get()
follower = follower_key.get()

def incr_counts_in_user():
    user.followers_count += 1
    follower.following_count += 1

@ndb.transactional(retries=10, xg=True)
def run():
    friendship = create_friendship()
    incr_counts_in_user()
    ndb.put_multi([user, follower, friendship])
run()

1 个答案:

答案 0 :(得分:1)

在我看来,您没有在事务中获取用户。您用于交易修改的任何数据也需要在交易中读取,或者它实际上不是交易。