并发写入时数据存储中的数据不一致
Inconsistent data in datastore on concurrent writes
我正在使用像 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()
在我看来,您没有在交易中获取用户。您用于交易修改的任何数据也需要在交易内部读取,否则它实际上不是交易。
我正在使用像 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()
在我看来,您没有在交易中获取用户。您用于交易修改的任何数据也需要在交易内部读取,否则它实际上不是交易。