我在我的应用程序中有一个计数器,我期望有99%的时间在使用事务更新计数器时不会出现争用问题。GAE/P:为计数器使用延迟任务和事务
要处理1%的时候很热闹,我是通过使用交易延期任务中的思维更新计数器如下:
def update_counter(my_key):
deferred.defer(update_counter_transaction)
@ndb.transactional
def update_counter_transaction(my_key):
x = my_key.get()
x.n += 1
x.put()
偶尔的情况下,当竞争导致交易失败,任务将被重试。
我熟悉分片计数器,但这看起来更容易,适合我的情况。
有什么我错过,可能会导致此解决方案无法正常工作?
谢谢,对于我的应用程序来说,计数器并不确切,所以我不介意这种情况比较罕见。 –